您的位置:首页 > 其它

删除链表中倒数第n个节点

2017-03-28 22:32 239 查看
1.问题描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

2.思路:首先要定义一个头指针并且要在头指针的前面加一个dummy,用来储存头指针,并且一定要把dummy赋值给head。这样如果删除的是第一个元素,还有保存头节点的dummy可以返回删除头节点后的链表。另外再定义length来计算链表中节点数,再从头节点开始遍历链表一直到要删除节点的前一个节点,再把该节点的next指向它的next的next,这样就把要删除节点删除了,最后用dummy->next返回头节点即可返回删除指定节点后的链表。

3.代码:

/**
* Definition of ListNode
* class ListNode {
* public:
*     int val;
*     ListNode *next;
*     ListNode(int val) {
*         this->val = val;
*         this->next = 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;
ListNode *dummy=new ListNode(0);
dummy->next=head;
head=dummy;
p=head;
int length=0;
while(p!=NULL)
{  p=p->next;
length++;
}
for(int i=1;i<length-n;i++)
{   head=head->next;
}
head->next=head->next->next;
return dummy->next;
}
};


4.感想:这个程序比前几个链表的程序要复杂得多,并且当给定的样例调通的时候,发现1->NULL并不能调通!加上head=dummy就正确了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: