單鏈表連接法寶

今天在做算法題時遇到鏈表無法正常返回,有時返回爲空,有時返回只有一個一個節點。


經過反覆思考和查看他人代碼,我得到兩點心得在此記錄。

1.不要覆蓋節點

新節點應該穿件後不能直接賦值給node而是要賦值給node.next即
node.next = new Node();

2.移動節點前保留頭結點

這點很重要,最初忘記保留這個節點,返回後只有一個數據,先前數據丟失在二次元(真是可以說是泯滅,無形的消失,但有實際存在)。


下面是今天AC的題:

	給出兩個 非空 的鏈表用來表示兩個非負的整數。
其中,它們各自的位數是按照 逆序 的方式存儲的,
並且它們的每個節點只能存儲 一位 數字。如果,我們將這兩個數相加起來
,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

解題:

@Test
    public void test(){
        ListNode l1 = new ListNode(2);
        l1.next = new ListNode(4);
        l1.next.next = new ListNode(3);
        System.out.println("鏈表"+l1.next.val);
        ListNode l2 = new ListNode(5);
        l2.next = new ListNode(6);
        l2.next.next = new ListNode(4);

        ListNode listNode = addTwoNumbers(l1, l2);
        System.out.println("內容"+listNode.val);
    }



     public class ListNode {
     	//節點類
         int val;
         ListNode next;
         ListNode(int x) { val = x; }
    }

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        //創建返回列表
        ListNode list = new ListNode(0);
        //這裏表示保留頭結點
        ListNode lists = list;
        int sum = 0;
        //迭代所有節點
        while(l1 != null || l2!= null){
            if(l1!=null) {
                sum+=l1.val;
                l1 = l1.next;
            }
            if(l2!=null) {
                sum+=l2.val;
                l2 = l2.next;
            }
            //求和取餘
            lists.next = new ListNode(sum%10);
            sum/=10;
            //節點向移動
            lists = lists.next;

        }
        //確定有沒有進位
        if(sum>=1) {
            lists.next = new ListNode(sum);
        }
        return list.next;
    }

註明:以上內容如有爭議、指正,留言給我~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章