【leetcode C语言实现】面试题 02.05-链表求和

Python021

【leetcode C语言实现】面试题 02.05-链表求和,第1张

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

示例:

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

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

进阶:假设这些数位是正向存放的,请再做一遍。

示例:

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

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

当两个整数相加时,从个位开始,依次将两个数的对应位置进行相加,将所得结果的个位数作为相加后对应位置的结果,若有进位将进位的值在更高一位进行相加。此处两个数是以链表存储,同样的思路,依次将两个数的对应位置进行相加,并将所得结果保存到一个链表中。

运行结果:

楼主,你的程序太“复杂”,也许和你没有搞清楚链表有关。暂时没看你的程序,这里给你讲一下关于链表操作。就拿加法来说,基本操作是删除一个结点和插入一个结点

假设已有链表:h->(a,next)->(b,next)->(c,next)->NULL,h是头指针

删除(b,next):

pa = a, pb = pa->next->next

(要保证删除结点有指针指向它,且删除后本来该连起来的两端也有指针)

delete pa->next, pa->next = pb

在a后面插入d:px指向(d,next)

pa = a, pb = pa->next, 保护好结点后才可以断链

pa->next = px, px->next = pb

链表操作可以在纸上多模拟,另外形象些说,你可以把链表想象成铁链,你可以把它断开或者接上,但不可以直接把链环(结点)拿来操作,要有线(指针)系在(指向)某个环上才可以对该环操作。

如有疑问,欢迎给我发消息