个人主页:白日依山璟
专栏: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