首页 > 编程语言 > 详细

删除排序链表中的重复元素II --链表

时间:2019-11-25 20:06:49      阅读:83      评论:0      收藏:0      [点我收藏+]

题目

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例1

输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例2

输入: 1->1->1->2->3
输出: 2->3

 

思路

  • 新建新链表,创建newHead以及newCurrent分别是新链表的头部节点以及记录新链表当前值
  • 创建原链表pre指向虚拟头节点,以及current记录当前访问的值还有nextCurrent指向下一个元素
  • 以current是否为空判断,如果第一个元素的值与下一个元素不想等,可以将此节点插入到新链表中,并将指针向后移.

 

代码

public class ListNode {
    public var val: Int?
    public var next: ListNode?
    public init(_ val: Int){
        self.val = val
        self.next = nil
    }
}

func deleteDuplicates(_ head: ListNode?) -> ListNode? {
    if head?.next == nil {
        return head
    }
    var newHead: ListNode? //建立新链表的头部节点
    var newCurrent: ListNode? //新链接当前的值
    var pre: ListNode? //原链表的虚拟头节点
    var current: ListNode? = head //原链表当前访问的节点,默认第一个为头节点
    var nextCurrent: ListNode? = head?.next
    while current != nil {
        if pre?.val != current?.val, current?.val != nextCurrent?.val {
            //判断是否是新链表的第一个元素
            if newHead == nil {
                newHead = current
                newCurrent = current
            } else {
                newCurrent?.next = current
                newCurrent = current
            }
        }
        pre = current
        current = nextCurrent
        nextCurrent = current?.next
    }
    newCurrent?.next = current
    return newHead
}

上面代码有注释

 

结果

技术分享图片

技术分享图片

 

大家可以在playground中敲击代码,提高自己的编程能力!!!

删除排序链表中的重复元素II --链表

原文:https://www.cnblogs.com/guohai-stronger/p/11927869.html

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