删除单向链表中间的某个节点

7 篇文章 0 订阅

面试题 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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值