目 录CONTENT

文章目录

29. 删除链表中重复的节点

Gz
Gz
2022-07-01 / 0 评论 / 0 点赞 / 149 阅读 / 638 字 / 正在检测是否收录...

29. 删除链表中重复的节点

在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留。

数据范围

链表中节点 val 值取值范围 [0,100][0,100]。
链表长度 [0,100][0,100]。

样例1

输入:1->2->3->3->4->4->5

输出:1->2->5

样例2

输入:1->1->1->2->3

输出:2->3

题解:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteDuplication(ListNode head) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        
        ListNode p = dummy;
        while (p.next != null){
            ListNode q = p.next;
            //如果没有重复数,指针q只会向后移动一次
            while (q != null && p.next.val == q.val) q = q.next;
            //判断q是否只移动了一次,如果不是,直接p指针直接指向q,删除中间节点
            if (p.next.next == q) p = p.next;
            else p.next = q;
        }
        return dummy.next;
    }
}
0

评论区