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

题目描述

输入一个链表,反转链表后,输出新链表的表头。

/*
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出来的每个对象都是存放在堆内存中的,我们在使用的时候是通过栈区来指向堆中的对象地址来获取值,所以我这里就直接使用指向该结点的说法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值