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

Posted guohai-stronger

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除排序链表中的重复元素--链表相关的知识,希望对你有一定的参考价值。

今天我们开始另一模块的算法题,关于链表的操作. Let‘s do it !!!

题目

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次.

示例1

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

示例2

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

 

思想

  • 首先我们定义好节点结构,包括节点值、指向下一个节点的指针,以及初始化函数
  • 定义current指针指向头节点,以及定义的nextPointer指针指向头节点的下一个元素
  • 只要nextPointer不为空,继续循环
  • 如当前元素!=nextPointer.val 则将current的下一个指针指向nextPointer,并且将current向后移动一个位置
  • 如果相等,说明nextPointer指向的要往后移动,而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? {
    var current = head
    var nextPointer = head?.next
    current?.next = nil
    while nextPointer != nil {
        if current?.val == nextPointer?.val {
            nextPointer = nextPointer?.next
        } else {
            current?.next = nextPointer
            current = current?.next
            nextPointer = current?.next
            current?.next = nil //清楚野指针
        }
    }
    return head
}

 

结果

运行结果如下:

技术图片

技术图片

上面就是本题目的思路和代码,可以直接复制粘贴运行,希望对大家有所帮助!!!

以上是关于删除排序链表中的重复元素--链表的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]83. 删除排序链表中的重复元素

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

算法之小细节(细节~链表的特殊结点~提升优化度)~反转链表删除排序链表中的重复元素

83. 删除排序链表中的重复元素

083.删除排序链表中的重复元素

LeetCode83. 删除排序链表中的重复元素