题目
leetcode链接:206. 反转链表 - 力扣(LeetCode)
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
个人思路
如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。
其实只需要改变链表的next指针的指向,直接将链表反转 ,而不用重新定义一个新的链表,如图所示:
之前链表的头节点是元素1, 反转之后头结点就是元素5 ,这里并没有添加或者删除节点,仅仅是改变next指针的方向。
那么怎么反转呢?思路如下图:
首先定义一个指针cur指向头结点,再定义一个指针pre,初始化为null。
然后开始改变next指向了,cur.next=pre,这条语句有个问题,cur.next原本指向2这个结点,执行完cur.next=pre 后2结点就找不到了。因此我们要保存下一个结点temp=cur.next.
同时,pre 移动到cur的位置,cur移动到tempt的位置。
循环上述操作,循环停止cur==null,这个时候返回pre即可。
个人解答
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null){
return head;
}else{
ListNode cur=head;
ListNode pre=null;
while(cur!=null){
//先保存下一个结点
ListNode tempt=cur.next;
cur.next=pre;
pre=cur;
cur=tempt;
}
return pre;
}
}
}