Skip to content

Commit fa6e39d

Browse files
Create 2487. 从链表中移除节点.md
1 parent 046d03f commit fa6e39d

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#### 2487. 从链表中移除节点
2+
3+
难度:中等
4+
5+
---
6+
7+
给你一个链表的头节点 `head`
8+
9+
移除每个右侧有一个更大数值的节点。
10+
11+
返回修改后链表的头节点 `head`
12+
13+
**示例 1:**
14+
15+
![](https://assets.leetcode.com/uploads/2022/10/02/drawio.png)
16+
17+
```
18+
输入:head = [5,2,13,3,8]
19+
输出:[13,8]
20+
解释:需要移除的节点是 5 ,2 和 3 。
21+
- 节点 13 在节点 5 右侧。
22+
- 节点 13 在节点 2 右侧。
23+
- 节点 8 在节点 3 右侧。
24+
```
25+
26+
**示例 2:**
27+
28+
```
29+
输入:head = [1,1,1,1]
30+
输出:[1,1,1,1]
31+
解释:每个节点的值都是 1 ,所以没有需要移除的节点。
32+
```
33+
34+
**提示:**
35+
36+
* 给定列表中的节点数目在范围 `[1, 10^5]`
37+
* `1 <= Node.val <= 10^5`
38+
39+
---
40+
DFS:
41+
42+
由题意可知,节点对它右侧的所有节点都没有影响,因此对于某一节点,我们可以**对它的右侧节点递归地进行移除操作**
43+
44+
- 该节点为空,那么递归函数返回空指针。
45+
46+
- 该节点不为空,那么先对它的右侧节点进行移除操作,得到一个新的子链表,如果子链表的表头节点值大于该节点的值,那么移除该节点,否则将该节点作为子链表的表头节点,最后返回该子链表。
47+
48+
49+
50+
```Go
51+
/**
52+
* Definition for singly-linked list.
53+
* type ListNode struct {
54+
* Val int
55+
* Next *ListNode
56+
* }
57+
*/
58+
func removeNodes(head *ListNode) *ListNode {
59+
if head == nil {
60+
return head
61+
}
62+
head.Next = removeNodes(head.Next)
63+
if head.Next != nil && head.Val < head.Next.Val {
64+
return head.Next
65+
} else {
66+
return head
67+
}
68+
}
69+
```

0 commit comments

Comments
 (0)