数据结构与算法基础-数组与链表

王 茂南 2025年12月20日07:57:48
评论
974字阅读3分14秒
摘要这一部分介绍

基础知识

 

习题练习

链表翻转(考链表基本必考)

这一题是leetcode上第206题, 链接地址206. Reverse Linked List

这一题的要求很简单, 给定一个链表, 我们将其翻转即可. 可以查看下面的示例的输入和输出:

  1. Input: 1->2->3->4->5->NULL
  2. Output: 5->4->3->2->1->NULL

这里最简单的方法我们可以使用循环来完成, 即每次将这个节点的next指向他的上一个节点即可. 我们需要注意while中的顺序, 我们可以画图来理解一下其中的顺序, 大致的图是这样的.

数据结构与算法基础-数组与链表

其中following是记录cur后一个节点的, 这个是一定需要的.

  • 因为我们下面一个步骤是修改cur.next=prev,
  • 所以使用following保存原来的cur.next是很有必要的.
  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. #     def __init__(self, x):
  4. #         self.val = x
  5. #         self.next = None
  6. class Solution:
  7.     def reverseList(self, head: ListNode) -> ListNode: # ListNode表示输出的数据结构
  8.         cur, prev = head, None # 当前节点, 前驱节点
  9.         while cur: # 最后一轮cur会变为None
  10.             following = cur.next # 这个是一定需要的
  11.             cur.next = prev
  12.             prev = cur
  13.             cur = following
  14.         return prev

 

链表值两两交换

这一题是leetcode上第24题, 链接地址24. Swap Nodes in Pairs

这一题是要求翻转链表中相邻的两个节点的值, 输入和输出的范例如下所示:

  1. Given 1->2->3->4,
  2. Return the list as 2->1->4->3.

但是在做的时候, 我们需要考虑如下的特殊情况:

  • 链表为空
  • 链表里有一个值
  • 链表元素为奇数的情况, 奇数的时候最后一个元素是不变的

我们有两种考虑的方式,

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2025年12月20日07:57:48
  • 转载请务必保留本文链接:https://mathpretty.com/11867.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: