LeetCode 19.删除链表的倒数第N个结点 C写法

[复制链接]
发表于 2026-2-8 22:38:48 | 显示全部楼层 |阅读模式
LeetCode 19.删除链表的倒数第N个结点 C写法


思绪🤔:

  我们先创建一个哨兵位,如许便于我们头删,然后使用双指针,一个指针先走n+1步(带哨兵位要多走一步),然后两个指针再一起走,当先走的指针竣事,那么后走的指针下一个就是我们要删除的结点,末了用新的头结点吸收即可。

代码🔎:
  1. struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
  2.         struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode)); //创建哨兵位
  3.         guard->next = head;
  4.         struct ListNode* fast = guard;
  5.         struct ListNode* slow = guard;
  6.         while(n >= 0) //先走n+1步
  7.         {
  8.             fast = fast->next;
  9.             n--;
  10.         }
  11.         while(fast != NULL) //fast走到空就结束,此时slow刚好在删除的前一个
  12.         {
  13.             slow = slow->next;
  14.             fast = fast->next;
  15.         }
  16.         struct ListNode* del = slow->next;
  17.         slow->next = slow->next->next;  //更新结点
  18.         free(del);
  19.         struct ListNode* newhead = guard->next; //创建新头
  20.         free(guard);
  21.         return newhead;
  22. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表