剑指--反转链表

本文详细介绍了两种反转链表的方法:双指针迭代和递归。通过双指针(pre, cur)迭代,每次将cur的next指向pre,再更新pre和cur;递归则利用反转后的链表特性,调整节点指向,最终返回链尾节点。代码实现清晰,便于理解。

剑指–反转链表

1,题目:

在这里插入图片描述
2,思路:

方法一:双指针:

  • 1.我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。
  • 2.第二个指针 cur 指向 head,然后不断遍历 cur。
  • 3.每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
  • 4.都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。

下面是对应的图解:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法二:递归:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3,代码:

方法一:双指针:

class Solution {
	public ListNode reverseList(ListNode head) {
        /*
        1.我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。
2.第二个指针 cur 指向 head,然后不断遍历 cur。
3.每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
4.都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。


        */
		//申请节点,pre和 cur,pre指向null
		ListNode pre = null;
		ListNode cur = head;
		ListNode tmp = null;
		while(cur!=null) {
			//记录当前节点的下一个节点
			tmp = cur.next;
			//然后将当前节点指向pre
			cur.next = pre;//这样指针就反向指引了
			//pre和cur节点都前进一位
			pre = cur;
			cur = tmp;
		}
		return pre;
	}
}

方法二:递归:

class Solution {
	public ListNode reverseList(ListNode head) {
		//递归终止条件是当前为空,或者下一个节点为空
		if(head==null || head.next==null) {
			return head;
		}
		//这里的cur就是最后一个节点
		ListNode cur = reverseList(head.next);
		//这里请配合动画演示理解
		//如果链表是 1->2->3->4->5,那么此时的cur就是5
		//而head是4,head的下一个是5,下下一个是空
		//所以head.next.next 就是5->4
		head.next.next = head;
		//防止链表循环,需要将head.next设置为空
		head.next = null;
		//每层递归函数都返回cur,也就是最后一个节点
		return cur;
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值