算法面试题-用单向链表表示十进制整数,求两个正整数之和。1234+34=1268

数据结构是单向链表,并且是按照算数进行的。
思路如下
原结果

1 2 3 4 
      3 4 
1 2 6 8
思路结果
 4 3 2 1
 4 3
 8 6 2 1
 1 2 6 8 
大致就是单向链表的翻转,然后进行计算,然后在翻转。即可得出答案。本人才疏学浅只会写一种写法。

// 定义的单向基本链表结构
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
    }
}
class SolutionAdd {
    //翻转方法,把单向链表翻转
    public ListNode fanzhuan(ListNode listNode){
        ListNode pre = null;
        ListNode succ = null;
        while (listNode != null) {
            succ = listNode.next;
            listNode.next = pre;
            pre = listNode;
            listNode = succ;
        }
        return pre;
    }
    //计算的单向链表求和
    public ListNode add(ListNode node1, ListNode node2) {
        ListNode listNode = new ListNode(0);
        ListNode p = listNode;
        int sum = 0;
        while (node1 != null || node2 != null || sum!=0) {
            if (node1 != null) {
                sum += node1.val;
                node1 = node1.next;
            }

            if (node2 != null) {
                sum += node2.val;
                node2 = node2.next;
            }
            p.next = new ListNode(sum % 10);
            sum = sum / 10;
            p = p.next;
        }
        return listNode.next;
    }
}

public class Main {
    public static void main(String[] args) {
        //装载模拟数据 start
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        listNode1.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        ListNode listNode5 = new ListNode(3);
        ListNode listNode6 = new ListNode(4);
        listNode5.next = listNode6;
        //装载模拟数据 end
       
        SolutionAdd solutionAdd = new SolutionAdd();
        //翻转链表listNode1
        ListNode fanzhuan = solutionAdd.fanzhuan(listNode1);
        //翻转链表listNode5
        ListNode fanzhuan1 = solutionAdd.fanzhuan(listNode5);
        //进行计算
        ListNode add = solutionAdd.add(fanzhuan, fanzhuan1);
        //再次翻转得到结果
        ListNode fanzhuan3 = solutionAdd.fanzhuan(add);
        //输出最后的单链表记录
        System.out.print(fanzhuan3.val);                //1
        System.out.print(fanzhuan3.next.val);           //2
        System.out.print(fanzhuan3.next.next.val);      //6
        System.out.print(fanzhuan3.next.next.next.val); //8
        

    }
}
原文地址:https://www.cnblogs.com/liclBlog/p/15349482.html