删除链表中重复的结点 -- java

删除链表中重复的结点

http://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef

public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
        // 如果链表首结点为空 或 链表只有一个结点直接返回这个表头
        if(pHead == null || pHead.next == null){
            return pHead;
        }

        // 创建哨兵 head 使得 prev 始终在 cur 前结点
        ListNode head = new ListNode(-1);
        head.next = pHead;
        ListNode prev = head;
        ListNode cur = pHead;

        while(cur != null){
            // 判空不能少 !!! 只要用到 cur.next.val 就要对 cur.next 判空
             if(cur.next != null && cur.val == cur.next.val){
                 // 找到当前重复数字的最后一个结点
                 while(cur.next != null && cur.val == cur.next.val){
                     cur = cur.next;
                 }
                 // 让 prev 指向 最后一个重复的下一个(不重复的)
                  prev.next = cur.next;

                 // 这种情况说明了链表是以重复的结点结尾的,可以直接返回
                 if(cur.next == null){
                     return head.next;
                 }
                 cur = cur.next;
             }else{
                 // 开始我没写 else 导致程序比较凌乱
                 // prev 前移的条件是 当前结点与下一个结点不相同
                 prev = cur;
                 cur = cur.next;
             }    

        }
        return head.next;
    }
}
全部评论

相关推荐

一天代码十万三:作废作废,通通作废!被腾讯音乐录取的那一天,一切都将作废,之前的所有面试都作废,之前的所有offer都作废,之前的学历作废,星星✨作废,月亮🌙作废,银河系🌌作废。上岸的那一天,中国最好的互联网企业加持,就如同一场大雪覆盖了自己前半生的荒唐。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务