带进位的链表求和,不修改原链表。

笔试碰到一题,有两个数,如123456789和1234567,将每个数字放入链表,然后不修改链表的情况下求和。

说实话,被pass了,笔试时整个人状态都是懵的,本来算法不强,结果状态很丧,结束后整理了一下,才发现题意原来是这意思。

package com.example.test;

import java.util.LinkedList;

/**
 * @author soft_hzhk
 */
public class SinNode {
    private int value;
    public SinNode next;

    public SinNode(int value){
        this.value=value;
    }
    public int getValue() {
        return value;
    }

    private static SinNode sumResult(SinNode sinNode1,SinNode sinNode2){
        LinkedList<Integer> list1=new LinkedList<>();
        LinkedList<Integer> list2=new LinkedList<>();
        while (sinNode1!=null){
            list1.push(sinNode1.getValue());
            sinNode1=sinNode1.next;
        }
        while (sinNode2!=null){
            list2.push(sinNode2.getValue());
            sinNode2=sinNode2.next;
        }
        SinNode sinNode=new SinNode(0);
        int mode=0;
        while (!list1.isEmpty()||!list2.isEmpty()||mode!=0){
            int v1 = list1.isEmpty() ? 0 : list1.pop();
            int v2 = list2.isEmpty() ? 0 : list2.pop();
            int sum = v1 + v2 + mode;
            SinNode node = new SinNode(sum % 10);
            node.next = sinNode.next;
            sinNode.next = node;
            mode = sum / 10;
        }
        return sinNode.next;
    }
    private static void printNode(SinNode sinNode){
        if (sinNode != null) {
            System.out.println("----"+sinNode.getValue());
            printNode(sinNode.next);
        }
    }
    public static void main(String[] args){
        SinNode s1,s2,event1,event2;
        int length1=10;
        int length2=8;
        event1=s1=new SinNode(1);
        event2=s2=new SinNode(1);
        for (int i = 2; i < length1; i++) {
            SinNode sinNode=new SinNode(i);
            s1.next=sinNode;
            s1=s1.next;
        }
        for (int i = 2; i < length2; i++) {
            SinNode sinNode=new SinNode(i);
            s2.next=sinNode;
            s2=s2.next;
        }
        SinNode reorderNodeList = sumResult(event1,event2);
        printNode(reorderNodeList);
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值