18_2.【链表】删除链表中重复节点

题目

删除链表中重复节点

代码实现
public class DeleteDuplication {
	/**
	 * 删除链表中的重复节点
	 *  1、新建一个头节点,以防止第一个节点被删除。 
	 *	2、保存当前节点的前一个节点,循环遍历整个链表,如果当前节点的值与下一个节点的值相等
	 *		则将当前节点的值与 next.next节点的值比较,直到不相等或者null为止,
	 *			最后将当前节点的前一个节点 pre指向最后比较不相等的节点 
	 *	3、如果当前节点与next节点不相等,则直接让节点指针全部向后移动一位
	 */
	public ListNode deleteDuplication(ListNode head) {
		if(head == null)
			return null;
		
		ListNode preNode = new ListNode(); // 前一个节点
		ListNode tmpNode = preNode;
		preNode.next = head;
		ListNode curNode = head; // 当前节点
		
		while(curNode != null) {	
			//判断是否存在重复节点,是否应该删除			 
			if(curNode.next != null && curNode.value == curNode.next.value) {
				while(curNode.next != null && curNode.value == curNode.next.value)
					curNode = curNode.next;
				preNode.next = curNode.next;  // 删除相应的重复节点
			}
			else {
				preNode = curNode; // preNode 指针后移	
			}
			curNode = curNode.next;	
		}
		return tmpNode.next;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wimb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值