删除重复节点
题目描述
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
题解(java)
class Solution {
public ListNode removeDuplicateNodes(ListNode head) {
ListNode ob = head;
while (ob != null) {
//一重遍历
ListNode oc = ob;
while (oc.next != null ) {
//二重遍历
if (oc.next.val == ob.val) {
oc.next = oc.next.next;
} else {
oc = oc.next;
}
}
ob = ob.next;
}
//返回新链表
return head;
}
}
图示
详解(暴力解法)
- 该题解法类似于冒泡
- 1>首先先将链表中的所有值与头结点中的值比较,有相同节点,删除该节点,没有的话,继续遍历即可。
- 2>.这时会得到一个新链表,但是,已经判断过的 ob 不变,我们继续比较ob.next节点,开启新一轮的遍历。
- 3>因为比较的是ob与oc.next的值,所以当最外层 ob == null 时,所有遍历终止。返回新的以 head 为头结点的链表
比较说明
这里比较一下删除 链表中的节点 和 删除排序链表中的节点的不同
- 删除排序链表中的节点:因为链表是已经排序好的,所以有相同值的节点都是排在一起的,我们只需要遍历当前结点的值与下一节点的值是否相同即可
- 删除链表中的节点:因为不确定有相同值链表的位置,所以这里要用到两层循环遍历。
声明
- 原作者:E.L.E
- <本文著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处>
- <欢迎大家评论>