剑指offer面试题24:反转链表

题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。链表定义如下:

class ListNode{

int value;

ListNode next;

 ListNode(int value){

 this.value = value;

 }

}

直接上代码:

public class sortArrayByOddEven {
	public static void main(String[] args) {

		ListNode pHead = new ListNode(1);
		ListNode pAhead = new ListNode(3);
		ListNode pBhead = new ListNode(5);
		ListNode pChead = new ListNode(7);
		pHead.next = pAhead;
		pAhead.next = pBhead;
		pBhead.next = pChead;
		pHead = reversalNode(pHead);
		while (pHead != null) {
			System.out.print(pHead.value + ",");
			pHead = pHead.next;
		}

	}

	private static ListNode reversalNode(ListNode pHead) {
		if(pHead==null) 
			return null;
		
		ListNode pNode = pHead;
		ListNode next = null;    
		ListNode pre = null;
		ListNode reservalNode = null;
		while(pNode!=null) {
			next = pNode.next;
			if(next == null) {
				return reservalNode;   //当next==null时,Pnode则为我们需要返回当节点
			}
			pNode.next=pre;   //pre每次保存上一个节点,将本节点.next 赋值为上一个节点
			pre = pNode;     //将本节点作为复制为pre 作为下一个节点当上节点。
			pNode = next;//进行下一次循环
		}
		return reservalNode;
	}

分析:这个是根据老师当代码改写成当java代码;

1)在分析后我们其实可以发现,在while循环中当if()判断句其实可以不要,我们优化代码

private static ListNode reversalNode(ListNode pHead) {
		if(pHead==null) 
			return null;
		
		ListNode pNode = pHead;
		ListNode next = null;    
		ListNode pre = null;
		while(pNode!=null) {
			next = pNode.next;	
			pNode.next=pre;   //pre每次保存上一个节点,将本节点.next 赋值为上一个节点
			pre = pNode;     //将本节点作为复制为pre 作为下一个节点当上节点。
			pNode = next;//进行下一次循环
		}
		return pre;
	}

这样是因为我们当pNode.next不存在时,我们保存当pre就是我们要返回当头节点,因此直接返回即可,不用再进行判断。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值