链表是一种常见的基础数据结构,它在计算机科学中扮演着重要的角色。掌握链表编程对于理解更高级的数据结构和算法至关重要。以下是一些帮助你轻松入门链表编程的练习题,通过这些练习,你可以逐步提高对链表的理解和应用能力。
1. 创建链表
题目描述: 创建一个单链表,包含节点 1 -> 2 -> 3 -> 4 -> 5。
代码示例:
class ListNode:
def __init__(self, value=0, next=None):
self.value = value
self.next = next
def create_linked_list(values):
head = ListNode(values[0])
current = head
for value in values[1:]:
current.next = ListNode(value)
current = current.next
return head
# 使用示例
values = [1, 2, 3, 4, 5]
linked_list = create_linked_list(values)
2. 插入节点
题目描述: 在链表的第 n 个节点后插入一个新节点,假设链表长度为 m。
代码示例:
def insert_node(head, n, value):
if n <= 0:
return head
current = head
for _ in range(n - 1):
if current is None:
return head
current = current.next
new_node = ListNode(value)
new_node.next = current.next
current.next = new_node
return head
# 使用示例
linked_list = insert_node(linked_list, 2, 99)
3. 删除节点
题目描述: 删除链表中的第 n 个节点。
代码示例:
def delete_node(head, n):
if n <= 0 or head is None:
return head
if n == 1:
return head.next
current = head
for _ in range(n - 1):
if current.next is None:
return head
current = current.next
current.next = current.next.next
return head
# 使用示例
linked_list = delete_node(linked_list, 3)
4. 反转链表
题目描述: 反转一个单链表。
代码示例:
def reverse_linked_list(head):
prev = None
current = head
while current:
next_node = current.next
current.next = prev
prev = current
current = next_node
return prev
# 使用示例
linked_list = reverse_linked_list(linked_list)
5. 查找中间节点
题目描述: 找到链表的中间节点。
代码示例:
def find_middle_node(head):
slow = head
fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow
# 使用示例
middle_node = find_middle_node(linked_list)
6. 合并两个有序链表
题目描述: 合并两个有序链表。
代码示例:
def merge_sorted_lists(l1, l2):
dummy = ListNode()
tail = dummy
while l1 and l2:
if l1.value < l2.value:
tail.next = l1
l1 = l1.next
else:
tail.next = l2
l2 = l2.next
tail = tail.next
tail.next = l1 or l2
return dummy.next
# 使用示例
l1 = create_linked_list([1, 2, 4])
l2 = create_linked_list([1, 3, 4])
merged_list = merge_sorted_lists(l1, l2)
通过这些练习题,你可以逐步掌握链表编程的基础知识和技巧。不断地练习和挑战自己,相信不久的将来,你将能够熟练地运用链表解决各种问题。
