• Add Two Numbers


    题目意思很简单,两个链表分别表示两个数,将两个数相加的结果存入一个新的链表中。

    思路同样很简单:两个链表如果一样长,对应位置相加,如果某一个链表多了,则根据加的结果有无进位继续处理,全部结束后要考虑会不会还剩进位。

    c++的链表,题目已经给了一个挺好的例子:

    struct ListNode {
          int val;
          ListNode *next;
          ListNode(int x) : val(x), next(NULL) {}
    };

    对于创建链表可以使用一个头节点来一直指向这个链表,头节点中没有数据

    ListNode *l1,*l1head;
    l1=new ListNode(0);
    l1head=l1;
    
    for(int i=0;i<n;i++)
    {
        scanf("%d",&temp);
        ListNode *tempnode=new ListNode(temp);
        l1->next=tempnode;
        l1=l1->next;
    }

    接下来直接进行比较,情况考虑周全即可,比较危险的数据有

    [5],[5] ; [1],[99] 

     1 class Solution {
     2 public:
     3     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
     4         ListNode *res, *head;
     5         res = new ListNode(0);
     6         head = res;
     7         int flag = 0;
     8         while (l1 != NULL && l2 != NULL) {
     9             ListNode *tempNode = new ListNode(0);
    10             int temp = l1->val + l2->val + flag;
    11             if (temp >= 10) {
    12                 flag = 1;
    13                 tempNode->val = temp % 10;
    14             } else {
    15                 flag = 0;
    16                 tempNode->val = temp;
    17             }
    18 
    19             l1 = l1->next;
    20             l2 = l2->next;
    21             res->next = tempNode;
    22             res = res->next;
    23         }
    24         while (l1 != NULL) {
    25             ListNode *tempNode = new ListNode(0);
    26 
    27             if (flag == 1) {
    28 
    29                 tempNode->val = l1->val + flag;
    30                 if (tempNode->val >= 10) {
    31                     flag = 1;
    32                     tempNode->val = tempNode->val % 10;
    33                 } else {
    34                     flag = 0;
    35                 }
    36                 l1 = l1->next;
    37                 res->next = tempNode;
    38                 res = res->next;
    39             } else {
    40                 res->next = l1;
    41                 break;
    42             }
    43 
    44         }
    45         while (l2 != NULL) {
    46             ListNode *tempNode = new ListNode(0);
    47 
    48             if (flag == 1) {
    49 
    50                 tempNode->val = l2->val + flag;
    51                 if (tempNode->val >= 10) {
    52                     flag = 1;
    53                     tempNode->val = tempNode->val % 10;
    54                 } else {
    55                     flag = 0;
    56                 }
    57                 l2 = l2->next;
    58                 res->next = tempNode;
    59                 res = res->next;
    60             } else {
    61                 res->next = l2;
    62                 break;
    63             }
    64 
    65         }
    66         if (flag == 1) {
    67             ListNode *tempNode = new ListNode(1);
    68             res->next = tempNode;
    69         }
    70         return head->next;
    71     }
    72 };
    Add Two Numbers

    PS :

    调用和返回都使用了p->next的方式,因为没有把头指针传进去。

  • 相关阅读:
    Unity的动态加载简单使用
    枚举的使用总结
    IIS WEB程序如何访问共享目录
    AngularJS之页面跳转Route
    ASP.NET MVC4 BundleConfig的注意事项
    Android自动化测试------monkey自定义脚本(四)
    Android自动化测试------monkey(三)
    Android自动化测试------monkey(二)
    Android自动化测试------monkey(一)
    (一)adb命令的使用
  • 原文地址:https://www.cnblogs.com/holyprince/p/4603126.html
Copyright © 2020-2023  润新知