删除链表中重复的节点

删除链表中重复的结点

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

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {    
        if(pHead == null || pHead.next == null) return pHead;
        //建立一个新节点指向当前头节点
        ListNode pre = new ListNode(Integer.MIN_VALUE);
        pre.next = pHead;
        ListNode head = pre;
        int preVal = pre.val;
        while(pHead != null){
            //与前一个节点相等的话,pre指向后一个节点
            if(pHead.val == preVal) pre.next = pHead.next;    
            //不相等的话
            //从当前节点开始,看后面一个节点是否与当前节点值相同,若相同
            //将pre.next赋值为当前的next.next,然后跳过赋值pre继续循环
            if(pHead.next != null && pHead.val == pHead.next.val) {
                preVal = pHead.val;
                pre.next = pHead.next.next;
                pHead = pre.next;
                continue;
            }
            pre = pHead;
            pHead = pHead.next;
        }
        //返回新建节点的下一个即答案
        return head.next;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务