码迷,mamicode.com
首页 > 其他好文 > 详细

careercup-链表 2.5

时间:2014-12-04 00:43:21      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   for   div   

2.5 给定两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。

示例:

输入: (7->1->6)+(5->9->2),即617+295.

输出:2->1->9,即912.

进阶:

假设这些数位是正向存放的

示例:

输入:(6->1->7)+(2->9->5),即617+295.

输出:9->1->2,即912.

逆向存放时,C++实现:

#include<iostream>
#include<new>
using namespace std;

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

void createList(ListNode *&L,int arr[],int n)
{
    int i;
    ListNode *p=NULL;
    for(i=0; i<n; i++)
    {
        ListNode *tmp=new ListNode(arr[i]);
        if(L==NULL)
        {
            L=tmp;
            p=tmp;
        }
        else
        {
            p->next=tmp;
            p=tmp;
        }
    }
}

ListNode *merge(ListNode *L1,ListNode *L2)
{
    if(L1==NULL&&L2==NULL)
        return NULL;
    if(L1==NULL||L2==NULL)
        return L1!=NULL?L1:L2;
    ListNode *p=L1;
    ListNode *pre=L1;
    ListNode *q=L2;
    int carry=0;
    while(p&&q)
    {
        int sum=p->val+q->val+carry;
        p->val=sum%10;
        carry=sum/10;
        pre=p;
        p=p->next;
        q=q->next;
    }
    while(p)
    {
        int sum=p->val+carry;
        cout<<sum<<endl;
        p->val=sum%10;
        carry=sum/10;
        pre=p;
        p=p->next;
    }
    ListNode *tmp=NULL;
    while(q)
    {
        int sum=q->val+carry;
        tmp=new ListNode(sum%10);
        carry=sum/10;
        pre->next=tmp;
        pre=tmp;
        q=q->next;
    }
    if(carry==1)
    {
        tmp=new ListNode(carry);
        pre->next=tmp;
    }
    return L1;
}

int main()
{
    ListNode *L1=NULL;
    ListNode *L2=NULL;
    int arr1[3]={7,1,9};
    int arr2[5]={5,9};
    createList(L1,arr1,3);
    createList(L2,arr2,2);
    ListNode *head=merge(L1,L2);
    ListNode *p=head;
    while(p)
    {
        cout<<p->val<<" ";
        p=p->next;
    }
    cout<<endl;
}

正向存放时,可以先利用头插入将两个链表逆转,然后按照上面的过程求和。

 

careercup-链表 2.5

标签:style   blog   io   ar   color   os   sp   for   div   

原文地址:http://www.cnblogs.com/wuchanming/p/4141562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!