zoukankan      html  css  js  c++  java
  • C语言实现两数相加2018-09-23

    /*给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

    你可以假设除了数字 0 之外,这两个数字都不会以零开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807*/
    /**
    * Definition for singly-linked list.
    * struct ListNode {
    * int val;
    * struct ListNode *next;
    * };
    */
    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
    {
    struct ListNode *p = NULL, *q = NULL, *head = NULL;

    int index = 0, x, y, sum = 0;

    while (l1 != NULL || l2 != NULL)
    {
    x = (l1 != NULL) ? l1->val : 0; /*当l1非空时x等于l1所指向的值*/
    y = (l2 != NULL) ? l2->val : 0; /*当l2非空时y等于l2所指向的值*/

    sum = x + y + index; /*求和的时候记得加上用来进位的index*/

    p = (struct ListNode*)malloc(sizeof(struct ListNode));
    if (p != NULL) /*当节点分配成功*/
    {
    p->val = sum % 10; /*对和求余数*/
    index = sum / 10; /*计算是否需要进位*/
    p->next = NULL;
    }
    if (q == NULL) /*才产生了一个节点的时候,让head指向该节点*/
    {
    q = p;
    head = q;
    }
    else
    {
    q->next = p; /*将每一个节点连接起来*/
    q = p;
    }
    /*判断l1是否已经指向了一个空节点,这一步很重要, 也很危险,切记不能写成if(l1->next!NULL)这样会产生死循环(l1和l2一直指向最后一个节点)*/
    if (l1)
    l1 = l1->next;
    if (l2)
    l2 = l2->next;
    }
    if (index == 1) /*当最后一个节点相加超过10了,需要再产生一个节点来完成进位*/
    {
    p = (struct ListNode*)malloc(sizeof(struct ListNode));
    if (p != NULL)
    {
    p->val = 1;
    p->next = NULL;
    q->next = p;
    q = p;
    }

    }
    return head;
    }
    /*心得:

    *1、写过程略微复杂一点的程序一定要写好伪代码,然后在写的过程中再转化为标准C语言;

    *2、对于指针的使用,在指针改变指向,即移动或者交换的时候一定要留心,当指针移动的时候出现麻烦,可以往后思考一步到两步,就可以发现其问题;

    *3、对于相似问题的求解,一定要学会归纳一个模型,即使用几行代码就可以实现一系列相似问题的求解。

    */

  • 相关阅读:
    Windows Azure Cloud Service (14) 使用Windows Azure诊断收集日志记录数据
    Windows Azure Cloud Service (13) 用Visual Studio 2010 将应用程序部署到Windows Azure平台
    Windows Azure Cloud Service (15) 多个VM Instance场景下如何处理ASP.NET Session
    Windows Azure Storage (5) Windows Azure Drive
    Windows Azure Storage (7) 使用工具管理Windows Azure Storage
    SQL Azure(二) SQL Azure vs SQL Server
    webbrowser的自动提交
    提取视频的背景声音的软件
    Listview列排序的bug原因
    两个奇怪的问题
  • 原文地址:https://www.cnblogs.com/yangyalong/p/9693663.html
Copyright © 2011-2022 走看看