ZBLOG

已知链表结构为:typedef struct Node{int data; struct Node *next;}Node;编写函数实现:在链表的倒数第k个位置插入元素x(即x成为链表的倒数第k个元素),插入成功返回链表头指针(链表第一个结点的地址),不成功返回NULL(假设链表结点都在堆区)。函数原型为:Node * fun(Node *h, int x, int k);

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;   // 返回原始的头结点

}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5774

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?