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

今天我们开始另一模块的算法题,关于链表的操作. 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
}

 

结果

运行结果如下:

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

posted @ 2019-11-25 14:31  国孩  阅读(145)  评论(0编辑  收藏  举报