您的位置:首页 > 大数据 > 人工智能

leetcodeSubmission Details 删除链表倒数第n个结点

2016-09-03 19:40 441 查看
删除链表倒数第n个节点,要求只遍历一次

需要2个指针left和right

举个例子,删除倒数第2个

0->1->2->3->4

left指向0,right指向0

right向右移动n=2位,即移动到2

接着left和right一起向右移动。当right移动到最后一个元素4时,left指向2

此时left的下一位就是要删除的元素

然后left指向4,即完成删除

PS:若移动n=5,则right就会直接移动到NULL,这时候说明要删除的是第一个元素,即头节点要被改变。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
int i=0;
struct ListNode* p_left,* p_right,* p_delete;
p_left=head;
p_right=head;
i=n;
while(i--)
{
p_right=p_right->next;
}
if(p_right==NULL)
{
head=p_left->next;
return head;
}
while(p_right->next!=NULL)
{
p_right=p_right->next;
p_left=p_left->next;
}
p_delete=p_left->next;
p_left->next=p_delete->next;

return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐