单链表反转(关键词:链表/单链表/反转/逆转/逆置)

本文深入解析单链表反转的两种实现方法,通过代码示例详细解释了如何将单链表进行逆序操作,适合初学者理解链表的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表反转

一点解释

可以拿 1 种最简单的情况为例,2 个结点的单链表,纸笔画示意图,代码很好理解,不做详细解释了。

实现方法 1

def reverseList(head):
	prev = None

	while head is not None:
		cur = head
		head = head.next
		cur.next = prev
		prev = cur

	return prev

实现方法 2

def reverseList(head):
	prev = None

	while head:
		next = head.next
		head.next = prev
		prev = head
		head = next

	return prev

参考文献

  1. 21 单链表逆置
  2. LeetCode - 206. Reverse Linked List
  3. 这是印象笔记中的笔记,如果是在优快云手机APP上查看此博客,请在印象笔记手机APP中搜索该参考文献:206. (单链表 - 反转 - 逆转)Reverse Linked List
### 单链表算法 单链表是一种常见的线性数据结构,其中每个节点包含指向下一个节点的指针。为了实现单链表操作,可以采用迭代的方法来逐个反转相邻节点之间的链接关系。 #### 数据结构定义 对于单链表的数据结构定义如下: ```c typedef struct ListNode { int val; struct ListNode *next; } ListNode; ``` 此结构体表示一个具有整数值 `val` 指向下一节点指针 `next` 的列表节点[^1]。 #### 代码示例:单链表函数 下面是一个用于逆转给定单链表并返回新头结点的C语言函数实现: ```c ListNode* reverseList(ListNode* head) { ListNode *prev = NULL, *curr = head, *nextTemp; while (curr != NULL) { nextTemp = curr->next; // Store reference to the rest of list curr->next = prev; // Reverse current node's pointer prev = curr; // Move pointers forward one position curr = nextTemp; } return prev; // New head is last non-null 'prev' } ``` 该函数通过遍历整个链表,在每一步都将当前节点的 `next` 指向其前驱节点 (`prev`) 来完成链表方向上的转换。当到达原链表末端时,原来的最后一个有效节点成为新的头部节点,并被作为结果返回。 #### 实现方法概述 - 初始化三个辅助变量:`prev` 设为 `NULL`, 表示尚未处理的部分;`curr` 初始设为输入链表的第一个元素即 `head`; 变量 `nextTemp` 用来临时保存即将访问的下一项。 - 使用循环逐步更新这三个变量直到 `curr` 达到链表结尾(`NULL`)为止。 - 循环内部的操作包括存储后续部分、改变当前项的方向以及向前移动两个主要的工作指针。 - 完成后,原先位于最后位的有效节点现在成为了新的起点,因此将其设为最终输出的新头部。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值