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的情况处理好了,后面一般没问题了。
相关文章推荐
- 删除链表中倒数第n个结点
- 链表——删除链表中倒数第n个结点(时间复杂度为O (n))
- leetcode解题之 19. Remove Nth Node From End of List java 版(删除链表倒数第n个结点)
- 小程序:删除单链表中倒数第n个结点
- LeetCode 19. Remove Nth Node From End of List--删除链表的倒数第n个结点
- Remove Nth Node From End of List 删除链表的倒数第n个结点
- leetcodeSubmission Details 删除链表倒数第n个结点
- <LeetCode> 题174:删除链表中倒数第n个结点
- 删除链表的倒数第n个结点 Remove Nth Node From End of List
- 删除链表中倒数第n个结点
- 删除单向链表倒数第n个节点
- Lintcode 删除链表中倒数第k个结点
- 查找链表倒数第N个结点的地址(C++)
- 删除链表中倒数第n个节点
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- lintcode ----删除链表中倒数第n个节点
- leetcode-19. Remove Nth Node From End of List(删除链表倒数第N个节点)
- LeetCode 19题 删除链表给定的倒数第N个值
- Lintcode 174.删除链表中倒数第n个节点
- 删除链表中倒数第n个节点