问题描述:反转一个单链表
链接:https://leetcode-cn.com/problems/reverse-linked-list
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
求解思路:
- 创建三个引用:prevNode、curNode、NextNode分别指向前一个节点、当前节点和下一个节点。
- 反转核心操作:让当前节点的next指向前一个节点。curNode.next = prevNode;
- 更新三个引用。
- 更新newHead的指向。让neHead指向最后一个节点。
代码实现:
class Solution {
public ListNode reverseList(ListNode head) {
//1.判断特殊情况
if(head == null){
return null;
}
if(head.next == null){
return head;
}
ListNode newHead = null;
//2.创建引用
ListNode prevNode = null;
ListNode curNode = head;
while(curNode != null){
ListNode nextNode = curNode.next;
if(nextNode == null){
//curNode指向链表的最后一个元素
newHead = curNode;
}
//3.反转(核心操作)
curNode.next = prevNode;
//4.更新引用位置
prevNode = curNode;
curNode = nextNode;
}
return newHead;
}
}
结果输出: