您的位置:首页 > 编程语言 > C语言/C++

作业6.174:删除链表中倒数第n个节点

2017-03-28 18:00 246 查看
题目:删除链表中倒数第n个节点

样例:给出链表1->2->3->4->5->null和n=2。

删除倒数第二个节点之后,这个链表将变成1->2->3->5->null。

思路:先设置一个计数器,把链表的长度计算出来,然后找到需要删除的节点的前一个节点,使它直接跳过需要删除的节点指向下一个就可以了。

代码:

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
ListNode *p=new ListNode(0), *r;
p->next=head;
r=p;
head=p;
int count=-1,i;
while(head!=NULL)
{
count++;
head=head->next;
}
for(i=-1;i<count-n-1;i++)
{
r=r->next;
}
r->next=r->next->next;
return p->next;
}
};

感想:这个问题是上一个的进化版,上一个题需要找出倒数第几个节点,这一个题就是接着上一个把找到的那个节点删掉就可以了。想是挺好想的,但是调试程序的过程中,除了不少错误,在找节点的时候总是找的不对,改了很多回才把程序改好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++作业