0
点赞
收藏
分享

微信扫一扫

leetcode19删除链表倒数第n个结点(双指针)

代码敲到深夜 2022-01-26 阅读 42

leetcode19删除链表倒数第n个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
我们仍然采用快慢指针进行解决。
以及虚拟头节点。

struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    struct ListNode *p = (struct ListNode *)malloc(sizeof(struct ListNode));
    p->next = head;//这里我们设置虚拟头结点
    struct ListNode *pr=head,*temp = p;//temp用来存最初的虚拟头节点
    while(n--) pr = pr->next;//这里我们先让pr走n步,此时p与pr距离为p
    while(pr != NULL)//接下来我们让pr与p一起走,当pr为空时,p与pr的距离
    //仍然为n,p所指的结点就是我们要删除的前一个结点位置。
    {
        p = p->next;
        pr = pr->next;
    }
    p->next = p->next->next;//删除结点基本操作
    return temp->next;//这里我们返回虚拟头结点的下一个结点,
    //也就是temp的作用。此处我们绝不能返回head
    //因为我们需要考虑删除头结点的情况,head被删除了就没了,
    //所以返回虚拟头结点所指的下一个绝对没毛病!
}
举报

相关推荐

0 条评论