剑指Offer之十六-链表反转

123 阅读1分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

题目来自剑指Offer之十六。

链表结点结构

class ListNode{
	int value;
	ListNode next = null;
	public ListNode(int value){
		this.value = value;
	}
}

题目描述

  • 输入一个链表的头结点,反转该链表并输出翻转后的头结点

代码实现

  • 遍历该链表
  • 保存后一个结点,以防止当前结点的next值更新后链表断开
  • 保存前一个结点,以便当前结点的next值更新为前一个结点
  • 最后一个结点将是反转之后的头结点,保存该结点返回

public static ListNode reverseList(ListNode head) {
	
	ListNode reverseListHead = null;
	ListNode curNode = head;
	ListNode preNode = null;
	ListNode nextNode = null;
	
	while(curNode != null){
		nextNode = curNode.next;
		if(nextNode == null){
			reverseListHead = curNode;
		}
		
		curNode.next = preNode;
		preNode = curNode;
		curNode = nextNode;
		
	}
	
	return reverseListHead;
}