首页 > 其他 > 详细

【LeetCode】删除链表的倒数第N个节点【双指针法】

时间:2019-08-12 21:14:27      阅读:225      评论:0      收藏:0      [点我收藏+]

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

来源:力扣(LeetCode)
链接:
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list

分析:

双指针法:

两个指针k1和k2都指向头结点,k1先走n步,然后k1和k2一起走,当k1走到尾部的时候,k2指向的结点就是链表的倒数第n个结点

/**
 * 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 k)
{
    if(head==NULL)
        return NULL;
    if(head->next==NULL&&k==1)
        return NULL;
    ListNode *p1=head,*p2=head,*pre=head;
    int c=k-1;
    while(c--)
    {
        p2=p2->next;
    }
    while(p2->next!=NULL)
    {
        pre=p1;
        p1=p1->next;
        p2=p2->next;
    }
    if(p1==head)
        return p1->next;
    else
    {
        pre->next=p1->next;
    }
    return head;
}
};

【LeetCode】删除链表的倒数第N个节点【双指针法】

原文:https://www.cnblogs.com/yinbiao/p/11342128.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!