-
Notifications
You must be signed in to change notification settings - Fork 44
/
_18_deleteNode.java
74 lines (69 loc) · 2.22 KB
/
_18_deleteNode.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package pp.arithmetic.offer;
import pp.arithmetic.Util;
import pp.arithmetic.model.ListNode;
/**
* Created by wangpeng on 2020-09-09.
* 剑指 Offer 18. 删除链表的节点
*
* 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
*
* 返回删除后的链表的头节点。
*
* 注意:此题对比原题有改动
*
* 示例 1:
*
* 输入: head = [4,5,1,9], val = 5
* 输出: [4,1,9]
* 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
* 示例 2:
*
* 输入: head = [4,5,1,9], val = 1
* 输出: [4,5,9]
* 解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
*
*
* 说明:
*
* 题目保证链表中节点的值互不相同
* 若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public class _18_deleteNode {
public static void main(String[] args) {
_18_deleteNode deleteNode = new _18_deleteNode();
ListNode head = new ListNode(4);
head.next = new ListNode(5);
head.next.next = new ListNode(1);
head.next.next.next = new ListNode(9);
ListNode listNode = deleteNode.deleteNode(head, 4);
Util.printListNode(listNode);
}
/**
* 解题思路:
* 对于链表的问题,最核心的思想就是遍历,使用一个虚拟节点指向头结点,用来缓存返回结果
*
* @param head
* @param val
* @return
*/
public ListNode deleteNode(ListNode head, int val) {
ListNode dummp = new ListNode(0);
dummp.next = head;
ListNode pre = dummp;
ListNode next = head;
while (next != null) {
if (next.val == val) {
pre.next = next.next;
next.next = null;
return dummp.next;
}
pre = next;
next = next.next;
}
return null;
}
}