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

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被删除了就没了,
    //所以返回虚拟头结点所指的下一个绝对没毛病!
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值