欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指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;
    }
}

这道题主要是考察对链表的使用;

 假设链表中存在以下值:

剑指offer(牛客)---15.反转链表

我们现在要将链表反转过来,获取当前链表结点currentLinked其结点如下图所示:

剑指offer(牛客)---15.反转链表

将下一个结点currentLinked.next赋值给临时结点temp,然后再将它的currentLinked.next赋值为pre(pre=null),现在该链表结构如图所示:

剑指offer(牛客)---15.反转链表

现在将当前结点currentLinked赋值给pre,使得pre指向当前结点, 在将temp赋值给currentLinked,相当于让currentLinked前进一位,现在链表结构如下图所示:

剑指offer(牛客)---15.反转链表

 

 将下一个结点currentLinked.next赋值给临时结点temp,然后再将它的currentLinked.next赋值为pre,现在该链表结构如图所示:

剑指offer(牛客)---15.反转链表

 现在将当前结点currentLinked赋值给pre,使得pre指向当前结点, 在将temp赋值给currentLinked,相当于让currentLinked前进一位,现在链表结构如下图所示:

剑指offer(牛客)---15.反转链表

后面以此类推.到最后的时候注意判断 temp是否为空,为空的话,说明我们反转链表完成,返回就可以了.

总结:该题主要是对链表基本性质的考察,断链和连接链.

在这里我补充一点,我为什么在解题中用到指向当前结点,是因为在java虚拟机中new出来的每个对象都是存放在堆内存中的,我们在使用的时候是通过栈区来指向堆中的对象地址来获取值,所以我这里就直接使用指向该结点的说法.