- 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
/**
* 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:
//计算链表总长度
int length(ListNode* head)
{
int length=0;
while(head)
{
length++;
head=head->next;
}
return length;
}
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* p =new ListNode(0,head);//头结点
int len=length(head);
ListNode* q=p;
//参数的临界值
for(int i=1;i<len-n+1;i++)
{
q=q->next;
}
//删除结点核心代码
q->next=q->next->next;
ListNode* head_new=p->next;
delete p;
return head_new;
}
};