题目
编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点。
假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数后,该链表应变为1 -> 2 -> 4。
思路
一般来说,我们删除一个结点需要知道该结点的前一个结点p,使p->next = p->next->next,即使其前一个结点指向其后一个结点,跳过自己即可把自己在链表中删除。
但这个题目只知道要被删除的结点本身,由于是单链表无法获得其前一个结点。
可以采用这种方式:将该结点后一个结点的内容复制到本结点,将本结点指向下一个节点的下一个节点。即将本结点变成下一个节点,将下一个节点在链表中删除。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
ListNode next = node.next;
node.val = next.val;
node.next = next.next;
}
}
网友评论