首页 > 其他 > 详细

删除链表中重复的结点

时间:2020-12-18 10:06:14      阅读:28      评论:0      收藏:0      [点我收藏+]

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


解题思路

注意题目给出的条件:排序的链表,因此如果存在重复结点,那么一定是连续的。根据上述条件,我们可以设置双指针,如果遇到重复结点,一个指针保存当前位置,另一个往前走,直到走完该段重复指针为止

public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if (pHead == null || pHead.next == null) {
            return pHead;
        }
        ListNode head = new ListNode(0);
        head.next = pHead;
        // 当前结点的前一个结点
        ListNode pre = head;
        // 当前结点
        ListNode node= head.next;
        while(node != null){
        	// 当前结点与其下一个结点重复
            if(node.next != null && node.val == node.next.val){
                // 则指针一直向移动
                while(node.next != null && node.val == node.next.val){
                    node = node.next;
                }
                // 改变前后指针各自指向的结点
                pre.next = node.next;
                node = node.next;
            }else{
                pre = pre.next;
                node = node.next;
            }
        }
        return head.next;
    }
}

删除链表中重复的结点

原文:https://www.cnblogs.com/Yee-Q/p/14152726.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!