再记录一下删除链表的倒数第N个元素

之前一直没关注过数据结构,最近猛刷一下。

删除倒数第N个元素,也是用两个指针,一个是先走,走了N-1次,因为刚开始指向head,这一次就不用走了。然后再然back指针走,这样front指针走到结尾的时候(指向最后的指针的时候)那么back就是指向要删除的指针了,又因为删除指针,要知道这个指针的前一个指针,所以要用一个指针,记录back的前一个指针。当然还要判断倒数第N个链表节点是否存在。下边是代码

struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
//po是先走的指针,p1是后走的指针,p2是指向p1前边的那个指针
    Node p0,p1,p2;
    int i=0;
    p0=head;
    for(i=1;i<n && p0!=NULL;i++)
    {
        p0=p0->next; 
    }
    if(i==n && p0!=NULL) 
    {
        p1=head;
        p2=p1;
    }
    else//说明超限,N大于总的指针个数
    {
        return (Node)0;
    }
    while(p0->next!=NULL)//为了使p0指向最后一个节点。如果p0!=NULL作为判断条件,那么p0最后不是//最后的节点,而是NULL,p0指向最后的节点,p1才指向要删除的节点
    {
        p2=p1;
        p1=p1->next;
        p0=p0->next;
    }
    if(p1==head)//如果删除的是头结点,就改变头节点的指向
    {
        head=head->next;
        free(p1);
    }else
    {
         p2->next=p1->next;
         free(p1);
    }
   
    return head;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值