一.问题描述
-
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
-
现有一个链表 – head = [4,5,1,9],它可以表示为:
-
示例 1:
-
输入:head = [4,5,1,9], node = 5
-
输出:[4,1,9]
-
解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
-
示例 2:
-
输入:head = [4,5,1,9], node = 1
-
输出:[4,5,9]
-
解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
二.示例代码
public class DelListNode237 {
public static void main(String[] args) {
ListNode listNode1 = new ListNode(4);
ListNode listNode2 = new ListNode(5);
ListNode listNode3 = new ListNode(1);
ListNode listNode4 = new ListNode(9);
listNode1.next = listNode2;
listNode2.next = listNode3;
listNode3.next = listNode4;
System.out.println(listNode1);
delListNode2(listNode3);
System.out.println(listNode1);
}
// 删除任意一个与节点相同值的节点
private static ListNode delListNode(ListNode head, int num) {
ListNode cur = head;
ListNode pre = null;
while (cur != null) {
if (cur.val == num) {
if (pre == null) {
return cur.next;
}
if (cur.next != null) {
pre.next = pre.next.next;
} else {
pre.next = cur.next;
}
return head;
}
pre = cur;
cur = cur.next;
}
return head;
}
// 删除非最后一个节点
public static void delListNode2(ListNode node) {
if (node == null) {
return;
}
node.val = node.next.val;
node.next = node.next.next;
}
}
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
@Override
public String toString() {
return "ListNode{" +
"val=" + val +
", next=" + next +
'}';
}
}