删除链表的倒数第 N 个结点(c++)
2021/10/6 17:11:23
本文主要是介绍删除链表的倒数第 N 个结点(c++),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目
19. 删除链表的倒数第 N 个结点
难度中等1594
给你一个链表,删除链表的倒数第
n
个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?
大概思路
- 设置p,q两个指针(初始化为head)
- p先向后移动n个位置
- 然后 p、q 指针一起向后移动 ,直到p指向链表最后一个结点(此时q指针指向需要被删除结点的前一个结点)
- 删除q的后继结点
注:需要考虑删除头结点的情况
代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode *q=head,*p=head,*t=head->next; if(head==NULL) { return head; } while(n--&&p->next!=NULL) //p指针向后移动n位 { p=p->next; } if(n!=-1) //删除头结点 { t=head; head=head->next; delete t; return head; } while(p->next!=NULL) //p指针和q指针一起向后移动,直到p指向最后一个结点 { q=q->next;p=p->next; } t=q->next; q->next=t->next; delete t; return head; } };
这篇关于删除链表的倒数第 N 个结点(c++)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享
- 2024-07-03微信支付提示订单号重复-icode9专业技术文章分享
- 2024-07-02微服务启动nacos注册上去了,但是一直没有收到请求-icode9专业技术文章分享
- 2024-07-02如何检查文件的编码格式-icode9专业技术文章分享
- 2024-07-02sublime 更改编码格式-icode9专业技术文章分享
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享