您的位置:首页 > Web前端 > Node.js

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

2014-11-14 22:17 225 查看
/**
* 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=0,*w=0,*e=0;
int i,j=0;
if(n==0)    return head;    //无需修改
if(n==1&&head->next==0)        return 0;    //只有一个结点,并且要删除掉它
q=e=head;                //e为最后一个结点的位置
for(i=0;i<n;i++){            //e先设置在q的后面为n个距离的地方,q->next是要删的结点
e=e->next;
j++;
if(e->next==0)    //针对刚好要求删掉链表的头结点
break;
}
while(e->next!=0){        //将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的情况处理好了,后面一般没问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: