编写一个函数以删除单链表中的节点(除了尾部节点),且只给出要删除的节点。
给定一个链表 head = [4,5,1,9],如下图所示:
例一:
输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 你拿到了值为 5 的第二个节点,在执行你的函数之后链表应当变为 4 -> 1 -> 9。
例二:
输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 你拿到了值为 1 的第三个节点,在执行你的函数之后链表应当变为 4 -> 5 -> 9。
提示:
1. 链表至少有两个元素。
2. 每个节点的值各不相同。
3. 给定的节点不会是尾部节点而且是链表中有效的节点。
4. 你的函数不要返回任何值。
这个题很简单,要求删除给定的节点。但是却不给你之前的节点,这样的话我们就没有办法在不修改节点值的情况下完成,也就是说我们必须需要修改某个节点的值。
由于给定的条件中说了给的节点不会是最后一个,所以我们连检查也不需要了。
/*
* 237. Delete Node in a Linked List
* https://leetcode.com/problems/delete-node-in-a-linked-list/
* https://www.whosneo.com/237-delete-node-in-a-linked-list/
*/
public class DeleteNode {
public static void main(String[] args) {
ListNode head = new ListNode(1);
ListNode node = head;
for (int i = 2; i < 10; i++) {
node.next = new ListNode(i);
node = node.next;
}
DeleteNode solution = new DeleteNode();
solution.print(head);
solution.deleteNode(head.next.next);
solution.print(head);
}
private void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
private void print(ListNode node) {
for (; node != null; node = node.next) {
System.out.print(node.val);
System.out.print("->");
}
System.out.println("null");
}
}