假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。
输入:[9,3,7],[6,3] 输出:{1,0,0,0}
struct ListNode {
int val;
struct ListNode *next;
};
/**
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) {
// write code here
}
算法设计
- 分别将两个链表p1,p2反转(9->3->7变为7->3->9,6->3变为3->6)
- 新建头结点p3,将最终结果保存在这个链表中
- 从头遍历两个反转后的链表,用k保存进位信息
- 当p1或p2非空时,不断循环。分别用x,y保存p1,p2数据域中的值。若p1(或p2)为空,则x(或y)=0
- 每次循环新建结点p,p->data=(x+y+k)%10,k=(x+y+k)/10
- 将结点p用头插法插入p3
- 如果p1(p2)非空则后移
- 最后,若进位信息k==1,则应再插入一个data=1的结点
具体实现
struct ListNode