【链表】链表相加_链表

思路:

反转两个链表后对应位相加。

进位的问题:

【链表】链表相加_加法_02

伪代码:

jin=0;
while(p!=null||q!=null){
  val=jin;
  if(p!=null)val+=p.val,p=p.next
  if(q!=null)val+=q.val,q=q.next
  jin=val/10;
  val%10尾插入链表
}
if jin>0
jin尾插入链表
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

理解:p!=null || q!=null 可以在一个while循环遍历两个链表,防止两个链表长度不同导致分类讨轮

if(p!=null)防止链表为空。

每次插入的数是(p.val(p!=null)+q.val(q!=null)+jin)%10组成,用(p.val(p!=null)+q.val(q!=null)+jin)/10更新jin。

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        if(head1==null)return head2;
        if(head2==null)return head1;
        head1=reverse(head1);
        head2=reverse(head2);
        ListNode head=new ListNode(0);
        ListNode nHead=head;
        int temp=0;
        while(head1!=null||head2!=null){
            int val=temp;
            if(head1!=null){
                val+=head1.val;
                head1=head1.next;
            }
            if(head2!=null){
                val+=head2.val;
                head2=head2.next;
            }
            temp=val/10;
            nHead.next=new ListNode(val%10);
            nHead=nHead.next;
        }
        if(temp>0){
            nHead.next=new ListNode(temp);
        }
        return reverse(head.next);
    }
    ListNode reverse(ListNode head){
        if(head==null)return head;
        ListNode dummyNode=new ListNode(0);
        ListNode p=head;
        while(p!=null){
            ListNode q=p.next;
            p.next=dummyNode.next;
            dummyNode.next=p;
            p=q;
        }
        return dummyNode.next;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.