剑指offer第十二题(Java):反转链表

反转链表

题目描述

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

题目解析

我们对链表进行操作,一定要思路清晰
首先将当前节点pNode的下一个节点保存起来,为pNext;
***如果这个节点为空,那么相当于遍历到最后了,就将pNode赋值给newNode,将newNode返回即可。
***如果这个节点不为空,那么先将当前节点pNode的下一个节点设置为前一个节点pPrev,再将当前节点pNode设置为前一个节点,最后将pNext设置为当前节点。

代码解析

public ListNode ReverseList(ListNode head) {
		//判断头结点是否为空
		if(head==null) {
			return null;
		}
		
	    ListNode newHead = null;
        ListNode pNode = head;
        ListNode pPrev = null;
        //判断是否到最后一个节点
        while(pNode!=null){
            ListNode pNext = pNode.next;
            //若到大最后一个节点,则将现在的这个节点赋值给新的头结点
            if(pNext==null) {
                newHead = pNode;
            }
            //将当前节点变为前一个节点,下一个节点变为当前节点,也就是三个节点换位置
            //将pPrev-->pNode-->pNext(pNode.next)转变为pPrev<--pNode<--pNext(pNode.next)
            pNode.next = pPrev;
            pPrev = pNode;
            pNode = pNext;
        }
        return newHead;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值