美文网首页
删除有序链表中的重复元素(LeetCode83. 删除排序链表中

删除有序链表中的重复元素(LeetCode83. 删除排序链表中

作者: 雁阵惊寒_zhn | 来源:发表于2020-11-05 23:28 被阅读0次

    题目

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

    解题思路

    1. 有序链表遍历到的当前节点,只需要判断与其前驱节点值是否相同就可以,所以定义变量preValue记录前一个节点的值,每次遍历更新。
    2. 如果与preValue相同,代表当前节点重复,更新preValue,继续遍历下一个节点。
    3. 如果与preValue不同,代表不重复节点,需要加入到新的链表中,更新preValue,继续遍历下一个节点。
    4. 新链表定义一个头节点,两个指针分别为头指针和尾指针。加入到新链表的节点,需要将其next指针置null,切断与原有链表的联系。这样返回新的头节点就是新链表的所有节点。

    代码

    public ListNode deleteDuplicates(ListNode head) {
        if(null == head){
            return null;
        }
        //定义新链表的头节点
        ListNode newHead = new ListNode(0);
        ListNode newTail = newHead;
        //初始化preValue为第一节点的值键1即可,保证第一个节点可以被放入新链表中
        int preValue = head.val - 1;
        //遍历链表的节点
        while(head != null){
            //如果当前节点val与preValue不相等,不重复节点
            if(head.val != preValue){
                //放入新的链表中
                newTail.next = head;
                newTail = head;
            }
            //无论是否是重复节点,都需要更新preValue,并且继续遍历下一个节点
            preValue = head.val;
            head = head.next;
            //新链表的尾指针的next置为null
            newTail.next = null;
        }
        return newHead.next;
    }
    

    相关文章

      网友评论

          本文标题:删除有序链表中的重复元素(LeetCode83. 删除排序链表中

          本文链接:https://www.haomeiwen.com/subject/bzscmktx.html