剑指offer(牛客)---15.反转链表
程序员文章站
2022-06-17 17:52:02
...
题目描述
输入一个链表,反转链表后,输出新链表的表头。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null) {
return head;
}
ListNode LinkedHead=null;
ListNode pre=null;
ListNode currentLinked=head;
ListNode temp=head;
while(currentLinked!=null) {
temp=currentLinked.next;
currentLinked.next=pre;
if(temp==null) {
LinkedHead=currentLinked;
}
pre=currentLinked;
currentLinked=temp;
}
return LinkedHead;
}
}
这道题主要是考察对链表的使用;
假设链表中存在以下值:
我们现在要将链表反转过来,获取当前链表结点currentLinked其结点如下图所示:
将下一个结点currentLinked.next赋值给临时结点temp,然后再将它的currentLinked.next赋值为pre(pre=null),现在该链表结构如图所示:
现在将当前结点currentLinked赋值给pre,使得pre指向当前结点, 在将temp赋值给currentLinked,相当于让currentLinked前进一位,现在链表结构如下图所示:
将下一个结点currentLinked.next赋值给临时结点temp,然后再将它的currentLinked.next赋值为pre,现在该链表结构如图所示:
现在将当前结点currentLinked赋值给pre,使得pre指向当前结点, 在将temp赋值给currentLinked,相当于让currentLinked前进一位,现在链表结构如下图所示:
后面以此类推.到最后的时候注意判断 temp是否为空,为空的话,说明我们反转链表完成,返回就可以了.
总结:该题主要是对链表基本性质的考察,断链和连接链.
在这里我补充一点,我为什么在解题中用到指向当前结点,是因为在java虚拟机中new出来的每个对象都是存放在堆内存中的,我们在使用的时候是通过栈区来指向堆中的对象地址来获取值,所以我这里就直接使用指向该结点的说法.
上一篇: Kong网关插件使用
下一篇: Kali下安装ssh