java单向链表翻转

前两天看到一个面试题:单向链表翻转,自己是个算法菜鸡,所以记录一下笔记和思路

定义单向链表数据结构:


/**
 * 定义一个单链表
 */
public class Node {
	private int data;   //当前节点数据
	private Node next;  //下一个节点

	public Node (int data) {
		this.data = data;
	}

	public int getData () {
		return data;
	}

	public void setData (int data) {
		this.data = data;
	}

	public Node getNext () {
		return next;
	}

	public void setNext (Node next) {
		this.next = next;
	}
}

这里使用一个临时节点来进行翻转

	public static Node Reverse2 (Node head){
		//head为当前节点
        Node preNode = null; //preNode为前一个节点
        Node tempNode = null;    //临时节点
        //1、当前节点不为空则进行翻转
        while(head!=null){
            //2、把当前节点head的下一节点数据保存到临时节点中tempNode中,防止丢失
            tempNode = head.getNext();
            //3、把当前节点head的下一节点设置为前一个节点
            head.setNext(preNode);
            //4、把当前节点head赋值给前一节点
            preNode = head;
            //5、把临时节点的数据放到当前节点中
            head = tempNode; 
        }

	}

原理就是使用使用一个临时节点保存下一节点的数据,待当前节点指向前一节点之后再把临时节点的数据赋值给当前节点

分析一下这注释中5个步骤的数据变化: 单向链表  1—>2—>3—>4—>5

第一次循环:

注释1,会判断head是否为空,如果不为空进入循环,显然head为1—>2—>3—>4—>5

注释2,会把head.getNext()存入临时节点tempNode中(临时变量).这时候tempNode = head.getNext() = 2—>3—>4—>5

注释3,会把当前节点的next指向前一个节点 head.setNext(preNode).这时候preNode为初始值null。所以当前head为1—>null

注释4,会把当前节点赋值给前一节点preNode=head,这时候preNode的值为:1—>null

注释5,会把临时节点数据赋值给当前节点,这是head = tempNode  = 2—>3—>4—>5.  第一次循环结束

第二次循环:

注释1,判断head是否为空,经过第一次循环结束之后head数据变为 2—>3—>4—>5。不为空,继续进入循环

注释2,把head.getNext()存入临时及诶单tempNode中,这时候tempNode = head.getNdext() = 3—>4—>5

注释3,把当前节点的next指向前一个节点,第一次循环之后preNode值为1—>null,所以head为2—>1—>null

注释4,把当前节点赋值给前一节点,这时候preNode的值为:2—>1—>null

注释5,把临时变量的值赋值给当前节点,这时候head的值就会变为3—>4—>5。第二次循环结束

第三次循。。。第四次循环。。直到循环结束之后preNode就会变为5—>4—>3—>3—>1

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值