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

该博客讨论如何通过链表表示整数,并实现两个这种链表相加的算法。内容包括将链表反转,创建结果链表,遍历并处理进位,以及具体实现细节。
摘要由CSDN通过智能技术生成

假设链表中每一个节点的值都在 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值