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

存在一个按升序排列的链表,给你这个链表的头节点 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 算法合集地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容