206.反转链表
思路1(迭代):
- 本题可以设置节点 pre,cur,以及cur的next节点设为节点temp 便于反转
- 将 cur的next 指向 pre,再将 pre 移到 cur的位置,cur 移到 temp的位置循环即可
- 到最后 cur 是null,注意 return pre即可
代码实现:
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null) return head;
ListNode pre = null;
ListNode cur = head;
ListNode temp = null;
while (cur != null) {
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
思路2(递归):
- 递归的终止条件:由题可知 head == null 或者 head.next == null 返回head
- 在一次递归中,我们需要将 节点 head.next.next = head 并将 head.next == null 用来反转
- 返回值只需要返回最后面的节点即可
代码实现:
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode last = reverseList(head.next);
head.next.next = head;
head.next = null;
return last;
}
}