1. 题目描述
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例1
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例2
输入:head = [1,2]
输出:[2,1]
示例3
输入:head = [ ]
输出:[ ]
提示
- 链表中节点的数目范围是
[0,500]
-5000 <= Node.val <= 5000
2. 思路
判断链表是否为空,如果为空直接返回头结点
判断链表是否为一个元素,如果是直接返回头结点
将head置为null
定义两个指针,cur和curNext,cur 指向头结点的next,表示要反转的元素;curNext指向cur的next,表示要反转元素的下一个元素
使用头插法将要反转的元素插入前一个元素的前面
3.代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseList(ListNode head) { if (head == null) { // 链表里一个元素都没有 return head; } if (head.next == null) { // 链表里只有一个元素 return head; } ListNode cur = head.next; // 要反转的元素 head.next = null; while (cur != null) { ListNode curNext = cur.next; // 头插法 cur.next = head; head = cur; cur = curNext; } return head; } }
运行结果: