剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
一、迭代
算法思路:
首先把cur设置到头节点,pre设置到null的位置。
然后在遍历链表
设置一个ListNode tmp 用来暂存cur.next的后继节点
然后在修改cur.next指向到pre
示例:1<-2->3->4->5->null
再把pre暂存到cur
1<-2(暂存在这)->3->4->5->null
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head, pre = null;
while (cur != null) {
ListNode tmp = cur.next; //暂存cur.next后继节点
cur.next = pre;//修改cur.next的指向,就可以实现反转了
pre = cur;//pre暂存cur
cur = tmp;//cur开始下一节点
}
return pre;
}
}
二、递归
class Solution {
public ListNode reverseList(ListNode head) {
return recur(head, null);
}
public ListNode recur(ListNode cur, ListNode pre) {
if (cur == null) return pre;//如果cur为null时,则终止条件
ListNode res = recur(cur.next, cur);//recur(1,null) recur(2,1) ...... recur(null,5)
cur.next = pre;//修改cur.next的指向,指向pre,实现反转
return res;//返回反转链表的头节点
}
}

浙公网安备 33010602011771号