链表:反转链表

反转链表

反转链表,常用的方法有迭代,栈反转,递归反转。

迭代

比如,现有链表1->2->3->4->5,

首先,从第一个节点开始,反转,将1->null,

接着向下一个节点2,迭代,反转,将2->1,

接着向下一个节点3,迭代,反转,将3->2,也就是变成了3->2->1,依此类推。

关键的几点:

复制代码
1.找到当前节点、上一个节点;
2.反转。将当前节点指向上一个节点,形成反转;
3.迭代。向后迭代,找到新的"当前节点"、"上一个节点"。

如下:

复制代码
public ListNode reserveListNode(ListNode head)  {
    //上一个节点
	ListNode prev=null;
    //当前节点
	ListNode curr=head;
    //当前节点不为null,就循环
    while( curr!=null) {
        //先记住下一个节点
		ListNode nextNode= curr.next;    

        //反转。将当前节点指向上一个节点,形成反转
		curr.next= prev;              
        //向后迭代。
        //迭代之后,新的上一个节点 pre,就是之前的"当前节点" curr
        //迭代之后,新的当前节点 curr,就是之前的"下一个节点" nextNode
		prev= curr;                    
		curr= nextNode;              
	}
    //最后prev会变成反转后的头节点,返回prev
     return prev;
}
相关推荐
Nil20813 小时前
leetcode 160相交链表
算法·leetcode·链表
Herbert_hwt14 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
晚风醉蝶15 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
Tyler_TXZ15 小时前
C++C语言之——二叉树
c语言·开发语言·数据结构·c++·二叉树
有点。16 小时前
C++二叉树二(练习题)
数据结构·c++·算法·图论
LuminousCPP16 小时前
栈和队列专题(一):LeetCode 20. 有效的括号
数据结构·经验分享·笔记·leetcode·手写栈
白狐_79818 小时前
408 数据结构|线索二叉树两题详解:先序线索化后的空链域 + 中序前驱/后继判断
c语言·数据结构·链表
疯狂打码的少年19 小时前
【数据结构】二叉排序树(BST)的定义与操作
数据结构·笔记·算法
wabs66619 小时前
关于字符串【力扣541.反转字符串II的思考】
数据结构·算法·leetcode·字符串
旖旎夜光21 小时前
LeetCode 30:串联所有单词的子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口