📚博客主页:爱敲代码的小杨.
✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》
❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️
🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
输入:head = [1,2]
输出:[2,1]
输入:head = [ ]
输出:[ ]
题目链接
判断链表是否为空,如果为空直接返回头结点
判断链表是否为一个元素,如果是直接返回头结点
将head置为null
定义两个指针,cur和curNext,cur 指向头结点的next,表示要反转的元素;curNext指向cur的next,表示要反转元素的下一个元素
使用头插法将要反转的元素插入前一个元素的前面
/** * 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; } }
运行结果: