返回
Swift LeetCode:巧妙移除链表指定元素,算法解题轻松搞定
IOS
2024-01-19 20:51:49
在浩瀚的代码世界中,LeetCode 犹如一座拔地而起的山峰,吸引着无数程序员前来挑战。本篇博文将带你踏上 Swift LeetCode 征途,直面「移除链表元素」这一经典难题,为你揭开算法解题的奥秘。
算法设计
本题的关键在于遍历链表,找出并移除所有满足特定值的节点。为此,我们可以采用以下算法:
- 创建一个哨兵节点,指向链表的头部。哨兵节点用于简化代码,避免处理链表为空或第一个节点即为目标值的情况。
- 使用两个指针:
prev
指向当前节点的前一个节点,curr
指向当前节点。 - 遍历链表,如果
curr
的值等于目标值,则跳过该节点,将prev
的 next 指向curr
的 next。 - 如果
curr
的值不等于目标值,则将prev
和curr
指针都向后移动一位。 - 遍历结束后,返回哨兵节点的 next,即修改后的链表头部。
代码实现
func removeElements(_ head: ListNode?, _ val: Int) -> ListNode? {
guard let head = head else { return nil }
// 创建哨兵节点
let dummy = ListNode(0, head)
// 初始化指针
var prev = dummy
var curr = head
while curr != nil {
if curr!.val == val {
// 移除当前节点
prev.next = curr!.next
} else {
// 移动指针
prev = curr!
}
curr = curr!.next
}
// 返回修改后的链表头部
return dummy.next
}
实例
假设链表为:[1, 2, 6, 3, 4, 5, 6]
,目标值为 6
。经过算法处理后,链表将变为:[1, 2, 3, 4, 5]
。
总结
通过这篇博文,我们共同探索了 Swift LeetCode 中「移除链表元素」的解题思路和代码实现。希望各位读者能够从中领悟算法设计的精髓,提升自己的编程技能。如果你有任何疑问或建议,欢迎在评论区留言交流。
扩展阅读