美文网首页iOS 底层面试
IOS 算法(基础篇) ----- 删除排序链表中的重复元素

IOS 算法(基础篇) ----- 删除排序链表中的重复元素

作者: ShawnAlex | 来源:发表于2021-03-26 10:05 被阅读0次

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。
1.链表中节点数目在范围 [0, 300] 内
2.-100 <= Node.val <= 100
3.题目数据保证链表已经按升序排列

例子:

例子1

输入:head = [1,1,2]
输出:[1,2]

例子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 算法合集地址

相关文章

网友评论

    本文标题:IOS 算法(基础篇) ----- 删除排序链表中的重复元素

    本文链接:https://www.haomeiwen.com/subject/vwxjhltx.html