删除链表的倒数第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;
}
};