LeetCode 0019 Remove Nth Node From End of List
2022/3/8 9:14:44
本文主要是介绍LeetCode 0019 Remove Nth Node From End of List,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原题传送门
1. 题目描述
2. Solution 1
1、思路分析
以 n = 2
dummy: 0 | 1 2 3 4 5 为例
s f
a、删除结点必定要先找到 待删除结点的前驱;
设待删除结点为p,其前驱为pre,通用删除操作: pre->next = p->next; 或 pre->next = pre->next->next;
b、本例中待删除的结点为倒数第n个结点,则其前驱结点为倒数第(n+1)个结点;
c、使用快慢指针,快指针先走n步,意图人为造一个n+1的区间 => 同步移动后,当快指针到链表尾时,慢指针在倒数第(n+1)位置;
d、结合c、与b、,搞定收工。
2、代码实现
package Q0099.Q0019RemoveNthNodeFromEndOfList; import DataStructure.ListNode; /* 以 n = 2 dummy: 0 | 1 2 3 4 5 为例 s f 1、删除结点必定要先找到 待删除结点的前驱; 设待删除结点为p,其前驱为pre,通用删除操作: pre->next = p->next; 或 pre->next = pre->next->next; 2、本例中待删除的结点为倒数第n个结点,则其前驱结点为倒数第(n+1)个结点; 3、使用快慢指针,快指针先走n步,意图人为造一个n+1的区间 => 同步移动后,当快指针到链表尾时,慢指针在倒数第(n+1)位置; 4、结合3、与1、,搞定收工。 */ public class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { // 挂头结点的原因,若不挂,当n=1时,second.next 之后不会再有 next ListNode dummy = new ListNode(0, head); ListNode first = dummy.next, second = dummy; // first 先走n步 for (int i = 0; i < n; i++) first = first.next; while (first != null) { first = first.next; second = second.next; } second.next = second.next.next; return dummy.next; } }
3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(1)
这篇关于LeetCode 0019 Remove Nth Node From End of List的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-25Elevate Your Lead Generation Game with Maps Scraper AI
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能