你今天学算法了吗?打卡第十八天
目录
一、题目
1、题目描述
2、基础框架
3、原题链接
二、解题报告
1、思路分析
2、代码详解
三、本题小知识
一、题目
1、题目描述
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
2、基础框架
Java 版本给出的基础框架代码如下:
/ * 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) {}
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
3、原题链接
LeetCode 206. 反转链表
二、解题报告
1、思路分析
见代码详解注释(迭代)当然递归也是可以的
2、代码详解
/ * 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) { //前指针结点 ListNode front=null; //当前结点 ListNode cur = head; //遍历迭代,每次都将当前结点指向它前面的结点,然后把当前结点和前结点都后移 while(cur!=null){ //存储当前结点的下一个结点 ListNode next=cur.next; //把当前结点指向前结点 cur.next=front; //前结点后移 front=cur; //当前结点后移 cur=next; } return front; }}
三、本题小知识
链表