Leetcode 206 反轉一個單鏈表
阿新 • • 發佈:2019-03-20
top iter ext node listnode stop 輸出 reverse 比較
2 3 2
3 4 5 –>NIL Stop
Leetcode 206 反轉一個單鏈表
分析
L->M->R->…
操作:
L->NIL
M->L
==>> M->R->R2->…
判斷是否需要繼續在R2節點的基礎上向右移動: R2.next==NIL
例題
反轉一個單鏈表。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
分析
L M R
NIL NIL head// head是否為空,為空則返回NULL,否則繼續叠代
NIL NIL 1
NIL 1 2
1 2 3
3 4 5 –>NIL Stop
苦於本女愚笨,這是個人覺得比較好理解的方法
public ListNode reverseList(ListNode head){ if( head ==null ) return null; ListNode L = null; ListNode M = null; ListNode R = head; while(M.next!=null){ R = M.next; M.next = L; L = M; M = R; } return L; }
/** * 叠代方法 * 1 -> 2 -> 3 -> 4 -> null * null <- 1 <- 2 <- 3 <- 4 * * @param head * @return */ public static ListNode reverseListIterative(ListNode head) { ListNode prev = null; //前指針節點 ListNode curr = head; //當前指針節點 //每次循環,都將當前節點指向它前面的節點,然後當前節點和前節點後移 while (curr != null) { ListNode nextTemp = curr.next; //臨時節點,暫存當前節點的下一節點,用於後移 curr.next = prev; //將當前節點指向它前面的節點 prev = curr; //前指針後移 curr = nextTemp; //當前指針後移 } return prev; }
Leetcode 206 反轉一個單鏈表