微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[Swift]LeetCode203. 移除链表元素 | Remove Linked List Elements

Remove all elements from a linked list of integers that have value val.

Example:

Input:  1->2->6->3->4->5->6,val = 6
Output: 1->2->3->4->5

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6,val = 6
输出: 1->2->3->4->5
72ms
 1 /**
 2  * DeFinition for singly-linked list.
 3  * public class ListNode {
 4  *     public var val: Int
 5  *     public var next: ListNode?
 6  *     public init(_ val: Int) {
 7  *         self.val = val
 8  *         self.next = nil
 9  *     }
10  * }
11  */
12 class Solution {
13     func removeElements(_ head: ListNode?,_ val: Int) -> ListNode? {
14         guard head != nil else { return nil }
15         
16         var head = head
17         while head != nil,head!.val == val {
18             head = head?.next
19         }
20         
21         var prev = head
22         var current = head?.next
23         
24         while let curr = current {
25             if curr.val == val {
26                 prev?.next = curr.next
27                 current = curr.next
28                 continue
29             }
30             prev = curr
31             current = curr.next
32         }
33         
34         return head
35     }
36 }

76ms

 1 /**
 2  * DeFinition for singly-linked list.
 3  * public class ListNode {
 4  *     public var val: Int
 5  *     public var next: ListNode?
 6  *     public init(_ val: Int) {
 7  *         self.val = val
 8  *         self.next = nil
 9  *     }
10  * }
11  */
12 class Solution {
13     func removeElements(_ head: ListNode?,_ val: Int) -> ListNode? {
14         guard let head = head else { return nil }
15         head.next = removeElements(head.next,val)
16         return head.val == val ? head.next : head
17     }
18 }

80ms

 1 /**
 2  * DeFinition for singly-linked list.
 3  * public class ListNode {
 4  *     public var val: Int
 5  *     public var next: ListNode?
 6  *     public init(_ val: Int) {
 7  *         self.val = val
 8  *         self.next = nil
 9  *     }
10  * }
11  */
12 class Solution {
13     func removeElements(_ head: ListNode?,_ val: Int) -> ListNode? {
14 
15         var dummy = ListNode(-1)
16         dummy.next = head
17         var cur = dummy
18         while cur.next != nil {
19             if cur.next!.val == val {
20                 cur.next = cur.next!.next
21             }
22             else{
23                 cur = cur.next!
24             }
25         }
26         return dummy.next
27     }
28 }

96ms

 1 /**
 2  * DeFinition for singly-linked list.
 3  * public class ListNode {
 4  *     public var val: Int
 5  *     public var next: ListNode?
 6  *     public init(_ val: Int) {
 7  *         self.val = val
 8  *         self.next = nil
 9  *     }
10  * }
11  */
12 
13 class Solution {
14     func removeElements(_ head: ListNode?,_ val: Int) -> ListNode? {
15         guard let _ = head else {
16             return nil
17         }
18         
19         //在表头添加一个哨兵节点
20         let fakeNode = ListNode(NSNotFound)
21         fakeNode.next = head
22         var prev:ListNode = fakeNode
23         var current:ListNode? = head
24         while let tmp = current {
25             if tmp.val != val {
26                 prev.next = tmp
27                 prev = prev.next!
28             }
29             current = tmp.next
30         }
31         
32         if prev.next != nil {
33             prev.next = nil
34         }
35         return fakeNode.next
36     }
37 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐