[Swift]LeetCode203. 移除链表元素 | Remove Linked List Elements
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10184259.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
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 }