Node * fun(Node *h, int x, int k){
if(h == NULL || k <= 0) return NULL; // 链表为空或k无效,返回NULL
Node* p = h;
Node* q = h;
for(int i=0; i<k-1; i++){ // p先走k-1步
if(p->next == NULL) return NULL; // 如果链表长度小于k,返回NULL
p = p->next;
}
while(p->next != NULL){ // 同时移动p和q,直到p指向尾结点
p = p->next;
q = q->next;
}
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode -> data=x;
if(q == h){ // 特殊情况:插入在头结点之前
newNode -> next=h;
return newNode; // 返回新的头结点
}
newNode -> next=q -> next;
q -> next=newNode;
return h; // 返回原始的头结点
}