题目:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
代码:
//一开始的想法是先求出单链表的长度length:count(第一次遍历链表),第二次就是删除第L-n+1个节点
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* p = head;
//建立一个新的链表,头部是val(0),next是head,这样就把链表全部拉进来了,好处是对于一个节点的链表能够进行正常操作
ListNode* find =new ListNode(0,head);
ListNode* temp =find;
int count=0;
//计算原始链表的长度
while(p!=nullptr){
++count;
p=p->next;
}
for(int i=1;i<count-n+1;++i){
temp=temp->next;
}
ListNode* del=temp->next;
temp->next=temp->next->next;
ListNode* ans=find->next;//舍弃新建链表的头部节点,恢复为删除目标节点的head链表
delete del;//释放删除节点
delete find;//释放无用的头部节点
return ans;
}
};
总结:
单链表的删除和插入操作多看看。