一,题目示例:
输入:1->2->3->4->5
输出:5->4->3->2->1
二,解决思路
1.让头节点指向空
2,向后遍历,更改每结点的next为前一个结点
3.定义一个新的结点作为头结点其实就是原链表的尾节点的引用,返回这个这点即可
三,代码实现
public ListNode reverseList(ListNode head) {
if (head == null) {
// 空链表, 不需要逆置
return null;
}
if (head.next == null) {
// 链表中只有一个元素, 也不需要逆置
return head;
}
ListNode newHead = null;
ListNode cur = head;
ListNode prev = null;
while (cur != null) {
ListNode next = cur.next;
if (next == null) {
// 当前 cur 就是原链表的末尾
newHead = cur; //让让原链表的尾指作为新结点的头
}
// 逆置的核心操作
cur.next = prev;
// 更新三兄弟的指向位置
prev = cur;
cur = next;
}
return newHead;
}