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){

  1. if(h == NULL || k <= 0) return NULL; // 链表为空或k无效,返回NULL
  2. Node* p = h;
  3. Node* q = h;
  4. for(int i=0; i<k-1; i++){ // p先走k-1步
  5. if(p->next == NULL) return NULL; // 如果链表长度小于k,返回NULL
  6. p = p->next;
  7. }
  8. while(p->next != NULL){ // 同时移动p和q,直到p指向尾结点
  9. p = p->next;
  10. q = q->next;
  11. }
  12. Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
  13. newNode -> data=x;
  14. if(q == h){ // 特殊情况:插入在头结点之前
  15. newNode -> next=h;
  16. return newNode; // 返回新的头结点
  17. }
  18. newNode -> next=q -> next;
  19. q -> next=newNode;
  20. return h; // 返回原始的头结点

}

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?