剑指 Offer 24. 反转链表
把当前节点的next设置为上一个节点,需要先存下来下一个节点,并且需要有个节点保存上一个节点
时间复杂度O(n),空间复杂度O(1)
class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while (curr != null) { ListNode next = curr.next; curr.next = prev; prev = curr; curr = next; } return prev; } }
递归
设置递归结束条件,head为空或head的下一个节点为空,将当前节点的下一个节点之后倒转得到新的头节点,将当前节点的下一个节点的指针指向当前节点。
当前节点的下一个节点置为空
时间复杂度O(n),空间复杂度O(n)
class Solution { public ListNode reverseList(ListNode head) { if(head==null || head.next==null) { return head; } ListNode newHead = reverseList(head.next); head.next.next = head; head.next = null; return newHead; } }