题解 | #删除链表中重复的结点#

删除链表中重复的结点

https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

import java.util.*;
/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        /*
            1. 增加一个哨兵节点在头部,遍历链表,p指向已处理的节点,p_next表示p的下一个节点
            2. flag表示p_next的值是否有重复,如果重复,则循环把p_next指向最后一个重复的节点,
               并将p.next设置为p_next.next,将p_next指针下移
            3. 如果p_next不重复(flag==false),则将p和p_next指针下移,重置flag为false
         */
        if (pHead==null || pHead.next==null)
            return pHead;
        boolean flag = false;
        ListNode head = new ListNode(0);
        head.next = pHead;
        ListNode p = head, p_next = head.next;
        while (p_next!=null){                
            while (p_next.next!=null && p_next.val==p_next.next.val){
                p_next = p_next.next;
                flag = true;
            }
            if (flag==true)
                p.next = p_next.next;
            else
                p = p.next;
            p_next = p.next;
            flag=false;
        }
        return head.next;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务