删除链表中重复的结点

来源:互联网 发布:达观数据 融资 编辑:程序博客网 时间:2024/06/05 08:33

题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。

注意原链表头节点的处理。

参考代码:

/* 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){            return null;        }        ListNode h = new ListNode(-1); //创建一个节点,用来表示原链表头节点的头节点        h.next = pHead;        ListNode p1 = pHead;        ListNode p2 = pHead;        ListNode frontp1 = h;        ListNode frontp2 = null;        boolean t = false;        while(p1 != null){            //frontp1 = p1;            frontp2 = p1;            p2 = p1.next;            while(p2 != null){                if(p1.val == p2.val){                    frontp2.next = p2.next;                    p2 = frontp2.next;                    t = true;                }else{                    frontp2 = p2;                    p2 = p2.next;                }            }            if(t){                t = false;                frontp1.next = p1.next;                p1 = frontp1.next;            }else{                frontp1 = p1;                p1 = p1.next;            }        }        return h.next;    }}
原创粉丝点击