此题为力扣题库题目
📌 文章目录:
题目:
1️⃣.题目解析
题目需要我们删除链表中重复的结点,注意这里的结点是未经过排序的,所以之前的是删除有序链表的元素方法不适用,需要进行修改,定义一个前驱用于和一个遍历链表的 cur ,把 cur 和 prev 的数值进行一一比对,删除重复的结点即可,下方代码实现
2️⃣.代码实现
步骤一、定一个前驱 prev 记录链表的开始,用这个 prev 和后面链表的结点数值进行比较
ListNode prev = head;
步骤二、定义外围循环,循环条件是 prev != null 即 prev 一直记录到链表尾
while(prev != null){
步骤三、定义一个 cur 用于遍历链表,寻找重复的结点数值,由于每次查找都是从 prev 向后查找,所以这里把 prev 赋值给 cur
ListNode cur = prev;
步骤三、定义内层循环,循环条件是 cur.next != null 因为下面的判断有用到
cur.next.val 所以循环需要判断,防止空指针异常,如果比对为 true 删除后方重复的结点,如果不是重复的结点,cur 向后走,继续寻找
while(cur.next != null){
if (cur.next.val == prev.val){
cur.next = cur.next.next;
}
else{
cur = cur.next;
}
}
步骤四、返回新链表的头
return head;
3️⃣.全部代码
class Solution {
public ListNode removeDuplicateNodes(ListNode head) {
ListNode prev = head;
while(prev != null){
ListNode cur = prev;
while(cur.next != null){
if (cur.next.val == prev.val){
cur.next = cur.next.next;
}
else{
cur = cur.next;
}
}
prev = prev.next;
}
return head;
}
}