算法总结之 两个单链表生成相加的链表

本文介绍了一种处理两个单链表数值相加的方法。首先逆序链表以方便逐位相加,处理进位,并生成结果链表,最后再次逆序结果链表。

算法总结之 两个单链表生成相加的链表

 对于这个问题还有一个很好的方法:

1、将两个链表逆序,这样就可以依次得到从低到高位的数字

2、同步遍历两个逆序后链表,相加生成新链表,同时关注进位

3、当两个链表都遍历完成后,关注进位。

4、 将两个逆序的链表再逆序一遍,调整回去

返回结果链表

package TT;

public class Test98 {

    public class Node{
        
        public int value;
        public Node next;
        
        public Node(int data){
            this.value=data;
        }
        
        
    }
    

    public  Node addLists2(Node head1, Node head2){
        head1 = reverseList(head1);
        head2 = reverseList(head2);
        
        int ca = 0;
        int n1 =0;
        int n2 =0;
        int n =0;
         
        Node c1 = head1;
        Node c2 = head2;
        Node node = null;
        Node pre = null;
        
        while(c1 !=null || c2!=null){
            n1 = c1 != null ? c1.value:0;
            n2 = c2 != null ? c2.value:0;
            n = n1+n2+ca;
            pre= node;
            node = new Node(n % 10);
            node.next=pre;
            ca=n/10;
            c1=c1 != null ? c1.next : null;
            c2=c2 != null ? c2.next : null;
        }
        if(ca == 1){
            pre=node;
            node = new Node(1);
            node.next = pre;    
        }
        reverseList(head1);
        reverseList(head2);
        return node;
    }
       public  static  Node reverseList(Node head){
            Node pre = null;
            Node next = null;
            while(head!=null){
                next=head.next;
                head.next=pre;
                pre=head;
                head=next;
            }
            return pre;
       }
    
        
    
    
}

 

posted @ 2017-09-10 16:50 toov5 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值