摘要:題目要求對(duì)以鏈表形式的兩個(gè)整數(shù)進(jìn)行累加計(jì)算。思路一鏈表轉(zhuǎn)置鏈表形式跟非鏈表形式的最大區(qū)別在于我們無(wú)法根據(jù)下標(biāo)來(lái)訪問(wèn)對(duì)應(yīng)下標(biāo)的元素。因此這里通過(guò)先將鏈表轉(zhuǎn)置,再?gòu)淖笸覍?duì)每一位求和來(lái)進(jìn)行累加。通過(guò)??梢詫?shí)現(xiàn)先進(jìn)后出,即讀取順序的轉(zhuǎn)置。
題目要求
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Follow up: What if you cannot modify the input lists? In other words, reversing the lists is not allowed. Example: Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 8 -> 0 -> 7
對(duì)以鏈表形式的兩個(gè)整數(shù)進(jìn)行累加計(jì)算。
思路一:鏈表轉(zhuǎn)置鏈表形式跟非鏈表形式的最大區(qū)別在于我們無(wú)法根據(jù)下標(biāo)來(lái)訪問(wèn)對(duì)應(yīng)下標(biāo)的元素。假如我們希望從后往前對(duì)每個(gè)位置求和,則必須每次都從前往后訪問(wèn)到對(duì)應(yīng)下標(biāo)的值才可以。因此這里通過(guò)先將鏈表轉(zhuǎn)置,再?gòu)淖笸覍?duì)每一位求和來(lái)進(jìn)行累加。
鏈表的轉(zhuǎn)置的方法如下:
假設(shè)鏈表為1->2->3 則為其設(shè)置一個(gè)偽頭:dummy->1->2->3, 并且記錄當(dāng)前需要交換的元素為cur 則每次轉(zhuǎn)置如下: dummy->1(cur)->2->3 dummy->2->1(cur)->3 dummy->3->2->1(cur)
代碼如下:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode rl1 = reverse(l1); ListNode rl2 = reverse(l2); ListNode result = new ListNode(0); int carry = 0; while(rl1 != null || rl2 != null || carry != 0) { int add = (rl1 == null ? 0 : rl1.val) + (rl2 == null ? 0 : rl2.val) + carry; carry = add / 10; ListNode tmp = new ListNode(add % 10); tmp.next = result.next; result.next = tmp; rl1 = rl1==null? rl1 : rl1.next; rl2 = rl2==null? rl2 : rl2.next; } return result.next; } public ListNode reverse(ListNode l) { ListNode dummy = new ListNode(0); dummy.next = l; ListNode cur = l; while(cur!= null && cur.next != null) { ListNode next = cur.next; cur.next = next.next; next.next = dummy.next; dummy.next = next; } return dummy.next; }思路二: 棧
如果不希望改變鏈表的結(jié)構(gòu),那么用什么方式來(lái)將鏈表中的元素按照倒序讀取呢?這時(shí)候就可以很快的聯(lián)想到棧這個(gè)結(jié)構(gòu)。通過(guò)??梢詫?shí)現(xiàn)先進(jìn)后出,即讀取順序的轉(zhuǎn)置。代碼如下:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { Stacks1 = new Stack (); Stack s2 = new Stack (); while(l1 != null) { s1.push(l1.val); l1 = l1.next; }; while(l2 != null) { s2.push(l2.val); l2 = l2.next; } int carry = 0; ListNode result = new ListNode(0); while(!s1.isEmpty() || !s2.isEmpty() || carry != 0) { int add = (s1.isEmpty() ? 0 : s1.pop()) + (s2.isEmpty() ? 0 : s2.pop()) + carry; carry = add / 10; ListNode tmp = new ListNode(add % 10); tmp.next = result.next; result.next = tmp; } return result.next; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74538.html
Problem You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and ...
摘要:公眾號(hào)愛(ài)寫(xiě)給定一個(gè)已按照升序排列的有序數(shù)組,找到兩個(gè)數(shù)使得它們相加之和等于目標(biāo)數(shù)。函數(shù)應(yīng)該返回這兩個(gè)下標(biāo)值和,其中必須小于。示例輸入輸出解釋與之和等于目標(biāo)數(shù)。 公眾號(hào): 愛(ài)寫(xiě)bug(ID:icodebugs) 給定一個(gè)已按照升序排列 的有序數(shù)組,找到兩個(gè)數(shù)使得它們相加之和等于目標(biāo)數(shù)。 函數(shù)應(yīng)該返回這兩個(gè)下標(biāo)值 index1 和 index2,其中 index1 必須小于 index2。...
摘要:公眾號(hào)愛(ài)寫(xiě)給定一個(gè)已按照升序排列的有序數(shù)組,找到兩個(gè)數(shù)使得它們相加之和等于目標(biāo)數(shù)。函數(shù)應(yīng)該返回這兩個(gè)下標(biāo)值和,其中必須小于。示例輸入輸出解釋與之和等于目標(biāo)數(shù)。 公眾號(hào): 愛(ài)寫(xiě)bug(ID:icodebugs) 給定一個(gè)已按照升序排列 的有序數(shù)組,找到兩個(gè)數(shù)使得它們相加之和等于目標(biāo)數(shù)。 函數(shù)應(yīng)該返回這兩個(gè)下標(biāo)值 index1 和 index2,其中 index1 必須小于 index2。...
摘要:同時(shí)題目假設(shè)每組輸入恰好只有一個(gè)答案,并且不能重復(fù)使用同一元素。理解這道題是可以用兩層循環(huán)蠻力解決的,但是效率太低了。如果這兩個(gè)元素和大于目標(biāo)數(shù)組,指針左移如果小于,指針右移。如果等于,則返回這兩個(gè)元素的位置記得用數(shù)組的數(shù)值加一解法 題目詳情 Given an array of integers that is already sorted in ascending order, fi...
摘要:前言從開(kāi)始寫(xiě)相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時(shí)也沒(méi)有按順序?qū)懍F(xiàn)在翻起來(lái)覺(jué)得蠻亂的??赡艽蠹铱粗卜浅2环奖?。所以在這里做個(gè)索引嘻嘻。順序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 從開(kāi)始寫(xiě)leetcode相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時(shí)也沒(méi)有按順序?qū)憽F(xiàn)在翻起來(lái)覺(jué)得蠻亂的。可能大家看著也非常不方便。所以在這里做個(gè)索引嘻嘻。 順序整理 1~50 1...
閱讀 4171·2021-09-29 09:34
閱讀 3870·2021-09-27 13:34
閱讀 655·2021-09-24 09:47
閱讀 3101·2019-08-30 15:53
閱讀 1884·2019-08-26 13:54
閱讀 2135·2019-08-26 13:43
閱讀 615·2019-08-23 14:47
閱讀 1802·2019-08-23 14:28