返回
纵览剑指 Offer 22 题解:纵享代码魅力,洞察数据结构奥秘
前端
2023-10-05 07:53:03
算法概述:双指针技巧巧解倒数第k个节点问题
剑指 Offer 22 题本质上是一个链表操作问题,要求您在给定链表中找到倒数第 k 个节点。解决此类问题,我们通常会借助双指针法。双指针法巧妙地利用两个指针,一个指针从链表头部开始遍历,另一个指针从倒数第 k 个节点处开始遍历。这两个指针同时前进,直到第一个指针到达链表尾部,此时第二个指针恰好指向倒数第 k 个节点。
伪代码实现:轻松理解双指针法
为了帮助您更好地理解双指针法,这里提供一段伪代码实现:
def find_kth_from_end(head, k):
# 设置两个指针,一个指向头部,一个指向倒数第 k 个节点
first = head
second = head
# 让第二个指针先前进 k 步
for _ in range(k):
second = second.next
# 两个指针同时前进,直到第一个指针到达链表尾部
while first.next:
first = first.next
second = second.next
# 此此时第二个指针指向倒数第 k 个节点
return second
代码示例:Python 代码实现双指针法
为了让您能够亲身体验双指针法的威力,我们提供了以下 Python 代码示例:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def find_kth_from_end(head, k):
first = head
second = head
for _ in range(k):
second = second.next
while first.next:
first = first.next
second = second.next
return second
# 创建一个链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)
# 查找倒数第 k 个节点
k = 2
result = find_kth_from_end(head, k)
# 打印结果
print("倒数第", k, "个节点的值为:", result.val)
总结:剑指 Offer 22 题解精髓
剑指 Offer 22 题考察的不仅仅是链表操作的技巧,更考验您对算法思维的理解和灵活运用。双指针法的精髓在于巧妙利用两个指针同时遍历链表,从而在一次遍历中找到倒数第 k 个节点。希望本篇博文能够帮助您掌握这种技巧,并在算法学习的道路上不断进步。