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