【数据结构链表 】反转链表

在这里插入图片描述

这是一道很经典的数据结构的题目:反转链表

快来和我一起攻克吧!

反转链表 : 顾名思义:
就是把一个链表反转过来,如图:
在这里插入图片描述

给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点

解题思路:

第一步:判断是否为空

先去判断是否为空链表~

不然我们去反转半天,结果是一个空的链表…
那这个结果就很尴尬…

若头结点为空就直接返回空

if(head == null){
	return null;
}

第二步:判断是否只有一个节点

  1. 若只有一个节点,那我们就直接返回这个节点即可
  2. 一般只有一个节点都是头节点
  3. 满足条件: head.next == null
if(head.next == null){
	return head;
}

第三步:翻转的核心思路

使用头插法来翻转, 让head的下一个节点的next指向head即可完成翻转,但是会造成余下的节点游离

所以我们需要去定义一个curNext节点指向剩余的节点

如图所示
没有翻转前的链表:
在这里插入图片描述

翻转之后的链表:
在这里插入图片描述

我们看图中的解释:

所以我们需要定义一个curNext指向cur.next,直到整个链表遍历结束为止

ListNode cur = head.next;
//头结点会变成尾结点,所以需要置为空
head.next = null;
while(cur != null){
	ListNode curNext = cur.next;
	cur.next = head;
	head = cur;
	cur = curNext;
}

//最后返回翻转好的链表头结点
return head;

完整代码如下:

public ListNode resever(ListNode head){
	if(head == null){
		return null;
	}
	if(head.next == null){
		return head;	
	}


	ListNode cur = head.next;
	head.next = null;
	while(cur != null){
		ListNode curNext = cur.next;
		cur.next = head;
		head = cur;
		cur = curNext;
	}
	return head;
}

对应的是力扣网上的LCR 024反转链表:

点击即可跳转: 反转链表

快去检验一下自己的学习成果吧~~

下次见~~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值