File tree 4 files changed +34
-29
lines changed
4 files changed +34
-29
lines changed Original file line number Diff line number Diff line change 29
29
- 若使用 C 或 C++ 语言,你不需要 ` free ` 或 ` delete ` 被删除的节点
30
30
31
31
## 解法
32
+
33
+ 定义一个虚拟头节点 ` dummy ` 指向 ` head ` ,再定义指针 ` pre ` 和 ` p ` 分别指向 ` dummy ` 和 ` head ` 。
34
+
35
+ 遍历链表,` pre ` 、` p ` 往后移动。当指针 ` p ` 指向的节点的值等于 ` val ` 时,将 ` pre.next ` 指向 ` p.next ` ,然后返回 ` dummy.next ` 。
36
+
32
37
<!-- tabs:start -->
33
38
34
39
### ** Python3**
38
43
# def __init__(self, x):
39
44
# self.val = x
40
45
# self.next = None
41
-
42
46
class Solution :
43
47
def deleteNode (self , head : ListNode, val : int ) -> ListNode:
44
- pre = ListNode(0 )
45
- pre.next = head
46
- dummy = pre
47
- p = head
48
+ dummy = ListNode(0 )
49
+ dummy.next = head
50
+ pre, p = dummy, head
48
51
while p:
49
52
if p.val == val:
50
53
pre.next = p.next
51
54
break
52
- else :
53
- pre, p = p, p.next
55
+ pre, p = p, p.next
54
56
return dummy.next
55
-
56
57
```
57
58
58
59
### ** Java**
@@ -67,17 +68,16 @@ class Solution:
67
68
*/
68
69
class Solution {
69
70
public ListNode deleteNode (ListNode head , int val ) {
70
- ListNode pre = new ListNode (0 );
71
- pre . next = head;
72
- ListNode dummy = pre , p = head;
71
+ ListNode dummy = new ListNode (0 );
72
+ dummy . next = head;
73
+ ListNode pre = dummy , p = head;
73
74
while (p != null ) {
74
75
if (p. val == val) {
75
76
pre. next = p. next;
76
77
break ;
77
- } else {
78
- pre = p;
79
- p = p. next;
80
78
}
79
+ pre = p;
80
+ p = p. next;
81
81
}
82
82
return dummy. next;
83
83
}
Original file line number Diff line number Diff line change 1
1
/**
2
- * Definition for singly-linked list. public class ListNode { int val; ListNode
3
- * next; ListNode(int x) { val = x; } }
2
+ * Definition for singly-linked list.
3
+ * public class ListNode {
4
+ * int val;
5
+ * ListNode next;
6
+ * ListNode(int x) { val = x; }
7
+ * }
4
8
*/
5
9
class Solution {
6
10
public ListNode deleteNode (ListNode head , int val ) {
7
- ListNode pre = new ListNode (0 );
8
- pre .next = head ;
9
- ListNode dummy = pre , p = head ;
11
+ ListNode dummy = new ListNode (0 );
12
+ dummy .next = head ;
13
+ ListNode pre = dummy , p = head ;
10
14
while (p != null ) {
11
15
if (p .val == val ) {
12
16
pre .next = p .next ;
13
17
break ;
14
- } else {
15
- pre = p ;
16
- p = p .next ;
17
18
}
19
+ pre = p ;
20
+ p = p .next ;
18
21
}
19
22
return dummy .next ;
20
23
}
Original file line number Diff line number Diff line change 3
3
# def __init__(self, x):
4
4
# self.val = x
5
5
# self.next = None
6
-
7
6
class Solution :
8
7
def deleteNode (self , head : ListNode , val : int ) -> ListNode :
9
- pre = ListNode (0 )
10
- pre .next = head
11
- dummy = pre
12
- p = head
8
+ dummy = ListNode (0 )
9
+ dummy .next = head
10
+ pre , p = dummy , head
13
11
while p :
14
12
if p .val == val :
15
13
pre .next = p .next
16
14
break
17
- else :
18
- pre , p = p , p .next
15
+ pre , p = p , p .next
19
16
return dummy .next
Original file line number Diff line number Diff line change 11
11
返回链表 4->5.
12
12
13
13
## 解法
14
+
15
+ 定义 ` p ` 、` q ` 指针指向 ` head ` 。
16
+
17
+ ` p ` 先向前走 ` k ` 步,接着 ` p ` 、` q ` 同时向前走,当 ` p ` 指向 ` null ` 时,` q ` 指向的节点即为链表的倒数第 ` k ` 个节点。
18
+
14
19
<!-- tabs:start -->
15
20
16
21
### ** Python3**
You can’t perform that action at this time.
0 commit comments