存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。
1.链表中节点数目在范围 [0, 300] 内
2.-100 <= Node.val <= 100
3.题目数据保证链表已经按升序排列
例子:
输入:head = [1,1,2]
输出:[1,2]
输入:head = [1,1,2,3,3]
输出:[1,2,3]
解题思路
比较好一点是链表是升序的, 那么相同元素必将连续, 那么我们对链表进行一次遍历即可
定义指针temp 指向头结点开始链表遍历 , 相同就 temp?.next = temp?.next?.next
将当前节点从链表移除, 不同 temp = temp?.next
等于下一个节点继续遍历, 遍历完返回头结点即可
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* public var val: Int
* public var next: ListNode?
* public init() { self.val = 0; self.next = nil; }
* public init(_ val: Int) { self.val = val; self.next = nil; }
* public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
* }
*/
class Solution {
func deleteDuplicates(_ head: ListNode?) -> ListNode? {
let head_change = ListNode()
var temp = head
head_change.next = temp
while temp != nil {
if temp?.val == temp?.next?.val {
temp?.next = temp?.next?.next
} else {
temp = temp?.next
}
}
return head_change.next
}
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址