【兩次過】Lintcode 904. 加一連結串列
阿新 • • 發佈:2018-11-08
給定一個非負整數,這個整數表示為一個非空的單鏈表,每個節點表示這個整數的一位。返回這個整數加一。
除了0本身,所有數字在最高位前都沒有0。
列表的頭節點存的是這個整數的最高位。
樣例
給出連結串列1 -> 2 -> 3 -> null
,返回 1 -> 2 -> 4 -> null
。
解題思路:
因為可能頭節點會變化,所以設定dummy結點,特別地,將dummy.val = 1,因為當9,99,999的時候+1,均會多出一個節點1。所以可以利用這個dummy節點可能當作這個節點。
基本思想是,設定tail和node兩個節點,分別指向尾部和尾部前一個節點,依次迴圈向前遍歷加一,最後特別考慮頭節點進位增加節點的情況。
/** * Definition for ListNode * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { /** * @param head: the first Node * @return: the answer after plus one */ public ListNode plusOne(ListNode head) { // Write your code here if(head == null) return null; ListNode dummy = new ListNode(1); dummy.next = head; ListNode tail = null; int cnt = 1; //迴圈向前遍歷加一 while(cnt != 0 && tail != head){ ListNode node = head; while(node.next != tail) node = node.next; int sum = node.val + cnt; node.val = sum % 10; cnt = sum / 10; tail = node; } //考慮最後頭節點前新增1的情況 if(cnt != 0) return dummy; else return dummy.next; } }