文章目录
一、206. 反转链表
1.题目
- 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
2.分析
对于递归算法,最重要的就是明确递归函数的定义:
输入一个节点 head,将「以 head 为起点」的链表反转,并返回反转之后的头结点。
原链表:
reverse(head.next) 执行完成后:
之后只需将2节点的 next 指向 1,1的 next 指向 null 即可完成整体链表的反转。
3.代码
迭代:
迭代方法就是从头结点开始,原地反转,利用指针 pre 和 tmp 直接将指针 cur 的 next 指针指向上一个节点,在遍历到原链表的 null 节点时,已经完成了反转。
public ListNode reverseList(ListNode head) {
ListNode cur = head; //new ListNode(head.val)错
ListNode pre = null; //new ListNode()错
//pre.next = cur;错
ListNode tmp = new ListNode();
while (cur != null) {