Description
Reverse a singly linked list.
Example:
1 2
| Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL
|
Follow up:
A linked list can be reversed either iteratively or recursively. Could you implement both?
####思路0
題意是將一個有序鏈錶反轉,首先使用迭代方法來遍歷列表。假設n是列表的長度,時間複雜度為$O(n)$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while (curr != null) { ListNode nextTemp = curr.next; curr.next = prev; prev = curr; curr = nextTemp; } return prev; } }
|
思路1
首先使用遞歸方法來遍歷列表。假設n是列表的長度,時間複雜度為$O(n)
1 2 3 4 5 6 7
| public ListNode reverseList(ListNode head) { if (head == null || head.next == null) return head; ListNode p = reverseList(head.next); head.next.next = head; head.next = null; return p; }
|