删除链表中倒数第n个结点
2017-03-25 16:59
260 查看
删除链表中倒数第n个结点
题目描述:给定一个链表,删除链表中倒数第n个结点,返回链表的头结点 如给定1->2->3->4->5->NULL和2,返回1->2->3->5->NULL.
解题思路:与返回链表中的倒数第n个结点值的那道题思路基本一样,从头到尾遍历一遍单链表,得到此链表的长度,从而得到倒数第n个结点正数为多少,然后再遍历此链表找到要删除的结点,让此结点的前结点的指针指向此结点的后一个结点。但是需要注意的是需要申请一个新链表,把原链表的的头指针存起来,以便于最后返回。
实现代码:
class Solution {
public:
/**
* @param head: The first node of linked list.
* @param n: An integer.
* @return: The head of linked list.
*/
ListNode *removeNthFromEnd(ListNode *head, int n) {
// write your code here
if(head->next==NULL&&n==1) return NULL;
ListNode *dummy=new ListNode(0);
ListNode *p=new ListNode(0);
ListNode *q=new ListNode(0);
dummy->next=head;
p->next=head;
head=dummy;
head=p;;
int count,m,l;
count=0;l=0;
while(head->next!=NULL){
head=head->next;
count++;
}
m=count-n;
if(m==0) {p= dummy->next; return p->next; } //处理边界情况
while(l<m) {
dummy=dummy->next;
l++;
}
q=dummy->next;
dummy->next=q->next;
delete q;
return p->next;
}
};
A题感悟:读完题只是有了大体的思路,还有一些细节需要处理,有的时候想不到的小细节往往是最大的障碍。前几次交这道题的时候全部都是 ERRORTIME,然后就一遍遍的改,渐渐的完善自己的代码。
相关文章推荐
- 删除链表的倒数第n个结点 Remove Nth Node From End of List
- 链表——删除链表中倒数第n个结点(时间复杂度为O (n))
- leetcodeSubmission Details 删除链表倒数第n个结点
- 小程序:删除单链表中倒数第n个结点
- 删除链表中倒数第n个结点
- LeetCode Remove Nth Node From End of List 删除链表的倒数第n个结点
- leetcode解题之 19. Remove Nth Node From End of List java 版(删除链表倒数第n个结点)
- Remove Nth Node From End of List 删除链表的倒数第n个结点
- <LeetCode> 题174:删除链表中倒数第n个结点
- LeetCode 19. Remove Nth Node From End of List--删除链表的倒数第n个结点
- lintcode ----删除链表中倒数第n个节点
- LintCode 删除链表中倒数第n个节点
- 链表倒数第n个结点
- 删除链表中倒数第n个元素
- LintCode 删除链表中倒数第n个节点
- 坚持坚持!用Java写出删除一个链表的倒数第N个节点,并返回头节点(N总是可达的)
- 删除链表中倒数第n个节点(时间复杂度为O(n))
- Lintcode删除链表中倒数第n个节点
- Remove Nth Node From End of List 链表删除倒数第N个元素@LeetCode
- 删除链表中倒数第n个节点