面试题 02.03. 删除中间节点
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
解题思路图:
java代码详情:
public class ListNode {
// 当前节点的值
int val;
// 指向的下一个节点
ListNode next;
// 有参构造函数,初始化就直接给val赋值
ListNode(int x) {
val = x;
}
public static void main(String[] args) {
// 定义五个节点
ListNode a = new ListNode(1), b = new ListNode(2), c = new ListNode(3), d = new ListNode(4),
e = new ListNode(5);
// 再让五个节点分别指向下一个
// 如a->b->c->d->e
a.next = b;
b.next = c;
c.next = d;
d.next = e;
deleteNode(d);
System.out.println(c.next.val);
}
a------------------>b-----------------> c ----------------->d
// [head][val][next]--->[head][val][next]--->[head][val][next]--->[head][val][next]
private static void deleteNode(ListNode d) {
// 删除: 将当前节点的下一个节点的值赋值给当前节点的值
// 第一步:就是将e的值复制给d 相当于(d.val==e.val)
// 也就是让c.next=5
d.val = d.next.val;
// 第二步:再让d直接等于e,应为d.next是e
// 最终目的就是让d前面的节点c跳过d直接指向e即可
d.next = d.next.next;
}
}