打卡第十一天:删除链表倒数第n个元素

题目描述

在这里插入图片描述

思路:使用双指针,快指针先走n步,然后让快慢指针一起走,当快指针走到空时,则此时慢指针所在的位置即为删除节点的位置。如总元素为5的链表中删除倒数第2个元素,快指针先走两步,再走到空需要4步,而倒数第二正好对应的是正数第四,因此就找到了目标元素。有点不同的是本题要让快指针走n+1步,因为要找到目标元素的前一个元素才能进行删除的操作。

时间复杂度:O(N)
空间复杂度:O(1)

struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
     typedef struct ListNode Node;
     Node* dummyhead=(Node*)malloc(sizeof(Node));
     dummyhead->next=head;
     Node* fast=dummyhead;
     Node* slow=dummyhead;

     n++;
     //找到删除节点的前一个节点

     while(n--&&fast!=NULL)
     {
         fast=fast->next;
     }

     while(fast!=NULL)
     {
         fast=fast->next;
         slow=slow->next;
     }

     slow->next=slow->next->next;

     return dummyhead->next;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值