生成代表两个整数相加值的结果链表

假设链表中每一个节点的值都在 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)%10k=(x+y+k)/10
  • 将结点p用头插法插入p3
  • 如果p1(p2)非空则后移
  • 最后,若进位信息k==1,则应再插入一个data=1的结点

具体实现

struct ListNode
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值