返回

力扣刷题链表:两两交换链表中的节点,精准攻克数据结构!

后端

各位开发者们,大家好!今天小六六带来了六六力扣刷题系列的第 31 篇文章,咱们今天来聊聊链表数据结构中两两交换节点这个经典问题。

作为一名优秀的程序员,算法能力必不可少。而刷力扣是提升算法能力的绝佳途径。小六六之前也一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两台晒网,刷几天,歇几个月。

但最近,小六六痛定思痛,决定要好好刷题,提高自己的算法能力。于是,六六力扣刷题系列就此诞生。

今天,咱们就来攻克链表中的两两交换节点这个问题。这是一个经典的数据结构问题,也是力扣上的一道高频面试题。

什么是两两交换链表中的节点?

顾名思义,两两交换链表中的节点就是将链表中的相邻两个节点进行交换。比如,给定一个链表 1 -> 2 -> 3 -> 4 -> 5,两两交换后的链表应该是 2 -> 1 -> 4 -> 3 -> 5。

如何两两交换链表中的节点?

这个题目的解法其实很简单,我们可以使用三个指针 prev、curr 和 next。prev 指向当前节点的前一个节点,curr 指向当前节点,next 指向当前节点的下一个节点。

具体步骤如下:

  1. 将 prev 指向 curr 的前一个节点,如果 curr 是链表的第一个节点,则 prev 为 null。
  2. 将 curr 的 next 指向 prev。
  3. 将 prev 的 next 指向 next。
  4. 将 curr 和 prev 移动到下一个节点。
  5. 重复步骤 1-4,直到 curr 为 null。

代码实现:

def swap_pairs(head):
  prev = None
  curr = head
  while curr and curr.next:
    next = curr.next
    curr.next = prev
    if prev:
      prev.next = next
    prev = curr
    curr = next
  return prev

使用示例:

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)

result = swap_pairs(head)

while result:
  print(result.val)
  result = result.next

输出:

2
1
4
3
5

总结

两两交换链表中的节点是一个经典的数据结构问题,也是力扣上的一道高频面试题。通过这篇文章,相信大家已经掌握了这个问题的解法。

刷力扣是一个循序渐进的过程,贵在坚持。小六六也希望大家都能养成每天刷题的习惯,不断提升自己的算法能力。

本文关键词: