题目
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
阅题思考
需要初始化哪些变量?是否为全局变量?用什么数据类型?作用是什么?
迭代和递归两种做法。
迭代:定义3个局部变量。pre = null,cur = head,next = null;
整体思路描述&哪些事需要封装成一个函数?
https://zhuanlan.zhihu.com/p/240694166
https://vdn3.vzuu.com/SD/cc3364bc-23bf-11eb-8c9f-eed74461d6e1.mp4?disable_local_cache=1&bu=078babd7&c=avc.0.0&f=mp4&expiration=1652805080&auth_key=1652805080-0-0-6ea3298599fcd50d5275de3745a8aa15&v=tx&pu=078babd7
代码答案
在这里插入代码片
题后总结
思路实现过程是否有磕绊?
迭代的时候先操作谁?
先给next赋值为cur.next,因为接下来会改变cur的next变量,需要把原来的先存起来。
最后返回谁?
迭代到最后的结果(cur == null)应该是pre为原链表倒数第一个节点,应该返回cur;
是否一题多解?
可以递归做这题。
https://blog.algomooc.com/024.html
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head.next == null){
return head;
}
ListNode cur = reverseList(head.next);
head.next.next = head;
// head 原来的下一节点指向自己,所以 head 自己本身就不能再指向原来的下一节点了
// 否则会发生无限循环
head.next = null;
return cur;
}
}
是否多提一解?