LeetCode 19.删除链表的倒数第N个结点 C写法
思绪🤔:
我们先创建一个哨兵位,如许便于我们头删,然后使用双指针,一个指针先走n+1步(带哨兵位要多走一步),然后两个指针再一起走,当先走的指针竣事,那么后走的指针下一个就是我们要删除的结点,末了用新的头结点吸收即可。
代码🔎:
- struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
- struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode)); //创建哨兵位
- guard->next = head;
- struct ListNode* fast = guard;
- struct ListNode* slow = guard;
- while(n >= 0) //先走n+1步
- {
- fast = fast->next;
- n--;
- }
- while(fast != NULL) //fast走到空就结束,此时slow刚好在删除的前一个
- {
- slow = slow->next;
- fast = fast->next;
- }
- struct ListNode* del = slow->next;
- slow->next = slow->next->next; //更新结点
- free(del);
- struct ListNode* newhead = guard->next; //创建新头
- free(guard);
- return newhead;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |