题目:假设链表中的每个节点都在0~9之间,那么链表整体就可以表示一个整数,如
9->3->7链表加上6->3链表,最后生成的链表是1->0->0->0。
思考:若将两个链表分别转换成整数相加,最后将和转换成链表,由于链表可能很长,会造成整数溢出,不推荐。
实现:注意最终表的排序是从表尾到表头,不然后面需要用到表头参数的函数就不方便计算了。
方法一:用两个栈
- 将两个链表分别存到两个栈中
- 只要有一个栈不为空,
则判断当前位置的元素:栈为空则为0,不为空则为弹出的元素。 - 执行相加操作:
将结果合成链表结构。 - 最后两个栈为空了,但还是要判断最高位是否有进位。
1 | public class AddList { |
方法二:利用链表的逆序
- 将两个链表逆序
- 同步遍历两个逆序后的链表,得到从低位到高位的数字
- 执行相加操作,判断是否有进位。同时将值存入新链表。
- 当两个逆序链表遍历完后,判断是否还有进位。
- 最后将新链表再逆序一次。
1 | public static Node addList2(Node head1, Node head2) { |
1 | //显示链表 |
输出:
1 | 1->0->0->0 |