LeetCode 19. 删除链表的倒数第 N 个结点 | C语言版
LeetCode 19. 删除链表的倒数第 N 个结点
题目描述
题目地址:19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
解题思路
思路一:使用双指针
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
//使用双指针
//设置哨兵节点
// struct ListNode* cur=new ListNode(0); c++
struct ListNode* cur = (struct ListNode*)malloc(sizeof(struct ListNode));
cur->next=head;
struct ListNode* slow=cur;
struct ListNode* fast=cur;
//1.fast指针先走n+1步
while(n-- && fast!=NULL){
fast=fast->next;
}
fast=fast->next;
//2.接着fast和slow同时移动,直到fast指向末尾NULL为止,此时slow指向要删除节点的上一个节点
while(fast!=NULL){
fast=fast->next;
slow=slow->next;
}
//3.删除节点
//slow的指针域指向要删除节点slow->next的下一个节点
slow->next=slow->next->next;
return cur->next;
}
运行结果
参考文章:
思路二:减少遍历节点数
代码实现
在这里插入代码片