精选力扣500题 第53题 LeetCode 19. 删除链表的倒数第 N 个结点c++/java详细题解
Posted 林深时不见鹿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精选力扣500题 第53题 LeetCode 19. 删除链表的倒数第 N 个结点c++/java详细题解相关的知识,希望对你有一定的参考价值。
1、题目
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
进阶: 你能尝试使用一趟扫描实现吗?
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
提示:
-
链表中结点的数目为
sz
-
1 <= sz <= 30
-
0 <= Node.val <= 100
-
1 <= n <= sz
2、思路
(两次遍历) O ( n ) O(n) O(n)
定义虚拟头节点节点,并指向链表头节点。我们从虚拟头结点开始遍历,得到链表的长度n
。如果我们想要将倒数第k
个结点删除,可以首先要找到倒数第k+1
个结点p
,然后将p->next = p->next->next
。而链表中的倒数第 k+1
个节点,对应链表中的正数第n-k
个节点。因此可以再从虚拟头节点开始遍历链表,将正数第n-k+1
个节点删除即可。
图示过程如下:
-
1、定义虚拟头节点节点,指向链表头节点。
-
2、从虚拟头结点
dummy
开始遍历,得到链表的长度n
。 -
3、如果要将倒数第
k
个结点删除,我们首先找到倒数第k+1
个结点p
,对应正数的第n-k
个结点。 -
4、让
p->next = p->next->next
,将其删除。 -
5、最后返回虚拟头结点的的下一个结点
dummy->next
。
时间复杂度分析:
O
(
n
)
O(n)
O(n),其中 n
是链表的长度。
空间复杂度: O ( 1 ) O(1) O(1)。
3、c++代码
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int k) {
auto dummy = new ListNode(-1); //虚拟头结点
dummy->next = head; //让虚拟头结点指向真正的头结点
int n=0;
for(auto p = dummy;p;p = p->next) n++; //计算结点的个数,便于找到倒数第k+1个结点
auto p = dummy;
for(int i = 1; i <= n-k-1;i++) p = p->next;
p->next = p->next->next;
return dummy->next;
}
};
4、java代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int k) {
ListNode dummy =new ListNode(-1); //虚拟头结点
dummy.next=head;
int n = 0;
for(ListNode p = dummy; p != null ;p = p.next) n++;
ListNode p = dummy;
for(int i = 1;i <= n-k-1;i++) p = p.next;
p.next = p.next.next;
return dummy.next;
}
}
原题链接: 19. 删除链表的倒数第 N 个结点
以上是关于精选力扣500题 第53题 LeetCode 19. 删除链表的倒数第 N 个结点c++/java详细题解的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第19题 LeetCode 199. 二叉树的右视图c++详细题解
精选力扣500题 第20题 LeetCode 704. 二分查找c++详细题解
精选力扣500题 第8题 LeetCode 160. 相交链表 c++详细题解
精选力扣500题 第61题 LeetCode 78. 子集c++/java详细题解