个人主页:白日依山璟
专栏:Java|数据结构与算法|每日一题

 
文章目录
- 1. 题目描述
 - 示例1
 - 示例2
 - 示例3
 - 提示
 
- 2. 思路
 - 3.代码
 
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的next置为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;
    }
}
 
运行结果:

世界上有三种k,梅花k,方片k,还有任何人不关注我我都会难过的ok




















