• Leetcode2>链表中对应位相加(进位)


    题目:

    给定两个单链表,单链表中的数都是非负数。链表中的数字都是反向存储的,,每个节点都是个位数,将链表对应的位相加,返回最终的结果;

    举例:

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    解题思路:

      其本质是将链表1和链表2反转之后,对应位相加且进位,结果进行反转,比如上述例子中:342+465 = 807;但由于链表是单链表,不能从后往前遍历,因此可以转换为从前向后加,向后进位,即243+564=708;下面列出解题的几个关键点:

    1. 代码中是将链表2加到链表1上的,因此需要注意当链表1比较短的情况,需要使用链表1的最后一个节点链接链表2;

    2. 最后一次需要进位时,要扩展节点的情况;比如243 + 567 = 7011;

    代码如下:

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 public class Solution {
    10     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {  // l1与l2对应位的值相加,向后进位
    11         if(l1 == null || l2 == null)
    12             return null;
    13         ListNode node1 = l1;
    14         ListNode node2 = l2;
    15         ListNode prev = null;
    16         int jinwei = 0;  // 进位
    17         while(node1 != null){
    18             node1.val += jinwei;
    19             if(node2 != null){
    20                 node1.val = node2.val + node1.val;
    21                 node2 = node2.next;  
    22             }
    23             jinwei = node1.val / 10;
    24             node1.val = node1.val % 10;
    25             prev = node1;
    26             node1 = node1.next;
    27         }
    28         while(node2 != null){  // 链表1比较短的情况
    29             node2.val += jinwei;
    30             jinwei = node2.val / 10;
    31             node2.val = node2.val % 10;
    32             prev.next = node2;
    33             node2 = node2.next;
    34             prev = prev.next;
    35         }
    36         if(jinwei > 0)  // 最后还要进一位
    37             prev.next = new ListNode(jinwei);
    38         return l1;
    39     }
    40 }
  • 相关阅读:
    poj 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/leavescy/p/5877755.html
Copyright © 2020-2023  润新知