|
56 | 56 |
|
57 | 57 | <!-- 这里可写通用的实现逻辑 -->
|
58 | 58 |
|
| 59 | +利用栈将数字逆序。 |
| 60 | + |
59 | 61 | <!-- tabs:start -->
|
60 | 62 |
|
61 | 63 | ### **Python3**
|
62 | 64 |
|
63 | 65 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
64 | 66 |
|
65 | 67 | ```python
|
66 |
| - |
| 68 | +# Definition for singly-linked list. |
| 69 | +# class ListNode: |
| 70 | +# def __init__(self, x): |
| 71 | +# self.val = x |
| 72 | +# self.next = None |
| 73 | + |
| 74 | +class Solution: |
| 75 | + def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: |
| 76 | + s1, s2 = [], [] |
| 77 | + while l1: |
| 78 | + s1.append(l1.val) |
| 79 | + l1 = l1.next |
| 80 | + while l2: |
| 81 | + s2.append(l2.val) |
| 82 | + l2 = l2.next |
| 83 | + carry, dummy = 0, ListNode(-1) |
| 84 | + while s1 or s2 or carry: |
| 85 | + carry += (0 if not s1 else s1.pop()) + (0 if not s2 else s2.pop()) |
| 86 | + # 创建结点,利用头插法将结点插入链表 |
| 87 | + node = ListNode(carry % 10) |
| 88 | + node.next = dummy.next |
| 89 | + dummy.next = node |
| 90 | + carry //= 10 |
| 91 | + return dummy.next |
67 | 92 | ```
|
68 | 93 |
|
69 | 94 | ### **Java**
|
70 | 95 |
|
71 | 96 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
72 | 97 |
|
73 | 98 | ```java
|
| 99 | +/** |
| 100 | + * Definition for singly-linked list. |
| 101 | + * public class ListNode { |
| 102 | + * int val; |
| 103 | + * ListNode next; |
| 104 | + * ListNode(int x) { val = x; } |
| 105 | + * } |
| 106 | + */ |
| 107 | +class Solution { |
| 108 | + public ListNode addTwoNumbers(ListNode l1, ListNode l2) { |
| 109 | + Deque<Integer> s1 = new ArrayDeque<>(); |
| 110 | + Deque<Integer> s2 = new ArrayDeque<>(); |
| 111 | + for (; l1 != null; l1 = l1.next) { |
| 112 | + s1.push(l1.val); |
| 113 | + } |
| 114 | + for (; l2 != null; l2 = l2.next) { |
| 115 | + s2.push(l2.val); |
| 116 | + } |
| 117 | + int carry = 0; |
| 118 | + ListNode dummy = new ListNode(-1); |
| 119 | + while (!s1.isEmpty() || !s2.isEmpty() || carry != 0) { |
| 120 | + carry += (s1.isEmpty() ? 0 : s1.pop()) + (s2.isEmpty() ? 0 : s2.pop()); |
| 121 | + // 创建结点,利用头插法将结点插入链表 |
| 122 | + ListNode node = new ListNode(carry % 10); |
| 123 | + node.next = dummy.next; |
| 124 | + dummy.next = node; |
| 125 | + carry /= 10; |
| 126 | + } |
| 127 | + return dummy.next; |
| 128 | + } |
| 129 | +} |
| 130 | +``` |
74 | 131 |
|
| 132 | +### **Go** |
| 133 | + |
| 134 | +```go |
| 135 | +/** |
| 136 | + * Definition for singly-linked list. |
| 137 | + * type ListNode struct { |
| 138 | + * Val int |
| 139 | + * Next *ListNode |
| 140 | + * } |
| 141 | + */ |
| 142 | +func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { |
| 143 | + s1, s2 := arraystack.New(), arraystack.New() |
| 144 | + for l1 != nil { |
| 145 | + s1.Push(l1.Val) |
| 146 | + l1 = l1.Next |
| 147 | + } |
| 148 | + for l2 != nil { |
| 149 | + s2.Push(l2.Val) |
| 150 | + l2 = l2.Next |
| 151 | + } |
| 152 | + carry, dummy := 0, new(ListNode) |
| 153 | + for !s1.Empty() || !s2.Empty() || carry > 0 { |
| 154 | + v, ok := s1.Pop() |
| 155 | + if ok { |
| 156 | + carry += v.(int) |
| 157 | + } |
| 158 | + v, ok = s2.Pop() |
| 159 | + if ok { |
| 160 | + carry += v.(int) |
| 161 | + } |
| 162 | + node := &ListNode{Val: carry % 10, Next: dummy.Next} |
| 163 | + dummy.Next = node |
| 164 | + carry /= 10 |
| 165 | + } |
| 166 | + return dummy.Next |
| 167 | +} |
75 | 168 | ```
|
76 | 169 |
|
77 | 170 | ### **...**
|
|
0 commit comments