leetcode 鏈表相關

1.給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。node

若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。數組

您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。this

示例:指針

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
緣由:342 + 465 = 807


public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) {
p = p.next;
}

if (q != null) {
q = q.next;
}
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}

public static void main(String[] args) {
Solution solution = new Solution();
ListNode node1 = solution.arrToList(new int[]{2, 4, 3});
ListNode node2 = solution.arrToList(new int[]{5, 6, 4});
ListNode result = solution.addTwoNumbers(node1, node2);
System.out.println(result);
}

public ListNode arrToList(int[] arr){
//用於存放數組轉成的鏈表
ListNode result = null;
//指向result的指針
ListNode p = null;
for (int i = 0; i < arr.length; i++){
//若是爲null,則存放爲頭節點
if (result == null){
p = new ListNode(arr[i]);
result = p;
} else {
//next指向下一個節點
p.next = new ListNode(arr[i]);
p = p.next;
}
}
return result;
}

}

class ListNode{
int val;
ListNode next;

ListNode(int val) {
this.val = val;
}
}

2.
將兩個有序鏈表合併爲一個新的有序鏈表並返回。新鏈表是經過拼接給定的兩個鏈表的全部節點組成的。

示例:

輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
 
ListNode dummyHead = new ListNode(0);ListNode cur = dummyHead;while (l1 != null && l2 != null) {    if (l1.val < l2.val) {        cur.next = l1;        cur = cur.next;        l1 = l1.next;    } else {        cur.next = l2;        cur = cur.next;        l2 = l2.next;    }}if (l1 == null) {    cur.next = l2;} else {    cur.next = l1;}return dummyHead.next;
相關文章
相關標籤/搜索