LeetCode Remove Nth Node From End of List 删除链表的倒数第n个结点

2023-05-17,,

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
struct ListNode *q=,*w=,*e=;
int i,j=;
if(n==) return head; //无需修改
if(n==&&head->next==) return ; //只有一个结点,并且要删除掉它
q=e=head; //e为最后一个结点的位置
for(i=;i<n;i++){ //e先设置在q的后面为n个距离的地方,q->next是要删的结点
e=e->next;
j++;
if(e->next==) //针对刚好要求删掉链表的头结点
break;
}
while(e->next!=){ //将e和q保持相同距离,往后移直到e指向最后一个元素,q->next就是所要删除的结点了
e=e->next;
q=q->next;
}
if(j<n) // 对于需要删除头结点的情况,用j判断
return head->next;
else
q->next=q->next->next;
return head;
}
};

题意:给一个链表,要删除从链尾数起,第n个结点,然后返回此链。

思路:分几种情况,一是要删除尾结点,即n=1;二是要删除头结点,需要特殊判断,同时又要缩小代码量(若加多几行代码就容易写多了)。

测试一直出问题,没考虑好只有两个结点的情况。当有两个结点的链表时,n=1或n=2的情况处理好了,后面一般没问题了。

LeetCode Remove Nth Node From End of List 删除链表的倒数第n个结点的相关教程结束。

《LeetCode Remove Nth Node From End of List 删除链表的倒数第n个结点.doc》

下载本文的Word格式文档,以方便收藏与打印。