题目
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
解题思路
这题比较简单,就是只要找到倒数第k个节点就可以了,双指针当一把尺子
先让一个指针走出去k步,然后两个指针一起向后就可以了
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *front=head;
ListNode *last=head;
//简单说,就是先得找到这个节点吧
while(n!=0){
front=front->next;
n--;
}
if(front==nullptr){//说明要删除的是头节点
head=head->next;
last->next=nullptr;
}else{//说明这个节点不是头节点
while(front->next!=nullptr){//一起往后走,直到到达要删除节点前面位置
front=front->next;
last=last->next;
}
last->next=last->next->next;
}
return head;
}
};