237. Delete Node in a Linked List
题目描述和难度
- 题目描述:
请编写一个函数,使其可以删除某个链表中给定的(非末尾的)节点,您将只被给予要求被删除的节点。
比如:假设该链表为 1 -> 2 -> 3 -> 4
,给定您的为该链表中值为 3
的第三个节点,那么在调用了您的函数之后,该链表则应变成 1 -> 2 -> 4
。
- 题目难度:简单。
- 英文网址:237. Delete Node in a Linked List 。
- 中文网址:237. 删除链表中的节点 。
思路分析
求解关键:把下一个结点的值复制给当前节点,然后再把指针指向下一结点的下一结点。弄清楚题意,题目只给你这个节点的引用,让你从链表中删除这个节点,所以不要和 dummyNode 那种套路混在一起了。
参考解答
参考解答1
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
ListNode(Integer[] nums) {
ListNode currNode = this;
currNode.val = nums[0];
for (int i = 1; i < nums.length; i++) {
currNode.next = new ListNode(nums[i]);
currNode = currNode.next;
}
}
@Override
public String toString() {
ListNode currNode = this;
StringBuilder s = new StringBuilder();
while (currNode != null) {
s.append(currNode.val);
s.append(" -> ");
currNode = currNode.next;
}
s.append("NULL");
return s.toString();
}
}
public class Solution {
public void deleteNode(ListNode node) {
// 因为题目已经明确说了,不是最后一个节点,因此 node.next 一定非空
ListNode next = node.next;
node.next = next.next;
node.val = next.val;
next.next = null;
}
public static void main(String[] args) {
ListNode node1 = new ListNode(0);
ListNode node2 = new ListNode(1);
node1.next = node2;
Solution s = new Solution();
s.deleteNode(node1);
}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0237-delete-node-in-a-linked-list ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。