返回
精解【剑指Offer-Swift】22.链表中倒数第k个节点 & 24.反转链表
IOS
2023-11-09 01:12:24
前言
【剑指Offer】是程序员面试中经常遇到的一个题库,它包含了大量经典的算法和数据结构问题。本文将详细讲解【剑指Offer-Swift】中的22.链表中倒数第k个节点和24.反转链表这两个问题。这两个问题相对简单,因此放在了一起讲解。
22.链表中倒数第k个节点
题目
给定一个链表,找到链表中倒数第k个节点。
解题思路
我们可以使用两个指针来解决这个问题。第一个指针从头开始移动,第二个指针从倒数第k个节点开始移动。当第一个指针到达链表末尾时,第二个指针正好指向倒数第k个节点。
代码实现
class ListNode {
var val: Int
var next: ListNode?
init(_ val: Int) {
self.val = val
self.next = nil
}
}
func findKthToLast(_ head: ListNode?, _ k: Int) -> ListNode? {
guard let head = head, k > 0 else {
return nil
}
var first = head
var second = head
for _ in 0..<k-1 {
guard let next = first.next else {
return nil
}
first = next
}
while first.next != nil {
first = first.next!
second = second.next!
}
return second
}
24.反转链表
题目
给定一个链表,反转链表并返回新链表的头节点。
解题思路
我们可以使用一个指针来反转链表。从头开始,依次将每个节点的next指针指向它的前一个节点,直到最后一个节点的next指针指向null。
代码实现
func reverseList(_ head: ListNode?) -> ListNode? {
var prev: ListNode? = nil
var curr: ListNode? = head
while curr != nil {
let next = curr?.next
curr?.next = prev
prev = curr
curr = next
}
return prev
}
总结
本文详细讲解了【剑指Offer-Swift】中的22.链表中倒数第k个节点和24.反转链表这两个问题。这两个问题相对简单,因此放在了一起讲解。文章提供了清晰的思路和详细的代码,帮助读者快速理解和掌握这两个问题。