删除链表的倒数第n个节点
- 题意是说给定一个链表,返回删除了第n个节点的链表
- 解题思路:还是双指针法,使用快慢指针,快指针先走k-1步,然后快慢指针同时向前走,并使用pre记录slow的前一个节点。当fast走到尾的时候,slow就指向了待删除节点。再通过pre指针删除。
代码
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
ListNode* removeNthFromEnd(ListNode* head, int n) {
// write code here
//题目保证n一定是有效的。。。
//还是使用头结点吧
ListNode* temp=new ListNode(-1);
temp->next=head;
ListNode* pre=nullptr;
ListNode* fast=temp,*slow=temp;
for(int i=0;i<n-1;i++){
fast=fast->next;
}
while(fast->next){
fast=fast->next;
pre=slow;
slow=slow->next;
}
pre->next=slow->next;
return temp->next;
}
};
本文介绍了如何使用双指针法解决删除链表倒数第n个节点的问题。首先创建一个虚拟头节点,然后让快指针先走n-1步,之后快慢指针同步移动,当快指针到达链表尾部时,慢指针正好指向待删除节点。最后通过慢指针的前一个节点更新链表。
483

被折叠的 条评论
为什么被折叠?



