zoukankan      html  css  js  c++  java
  • 算法面试题-用单向链表表示十进制整数,求两个正整数之和。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
            
    
        }
    }
  • 相关阅读:
    迅雷的工作原理 [揭密迅雷]
    揭密迅雷BT式下载本质 [揭密迅雷]
    2010年8月09日_周一_Toc control
    2010年8月08日_周日_MapCopyrightText control
    2010年8月08日_周日_Magnifier control
    2010年8月07日_周六_HoverExpandExtender control
    2010年8月11日_周三_ZoomLevel_control
    ArcGIS Server网站发布后地图显示空白的原因之一
    2010年8月10日_周二_TaskManagercontrol
    搭建一个简单的callBack函数
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349482.html
Copyright © 2011-2022 走看看