2AddTwoNumbers

本文介绍了一种解决两个逆序存储非负整数的链表相加问题的方法。通过遍历两个链表并逐位相加,同时处理进位情况,最终返回表示和的新链表。文章详细展示了如何处理不同长度链表的特殊情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给出两个链表,非负数字在链表中逆序存放,每个节点存放单个数字,将两个链表中的数字相加然后返回单链表

思路 :感觉就是链表的操作,注意进位,还有长度不一样的问题。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode head = null, cur = head;
		ListNode l1CurNode = l1, l2CurNode = l2;
		boolean flag = false; //进位
		while(l1CurNode != null && l2CurNode != null){ //不考虑改变原始输入的链表
			int sum = l1CurNode.val + l2CurNode.val;
			if(flag){
				sum += 1; //优先处理上轮的进位,上一轮最多进位1
				flag = false;
			}
			if(sum >= 10){
				sum = sum % 10;
				flag = true; //下一轮的进位
			}
			if(head == null){
				head = new ListNode(sum);
				cur = head;
			}else{
				cur.next = new ListNode(sum);
				cur = cur.next; //新添加的节点
			}
			l1CurNode = l1CurNode.next;
			l2CurNode = l2CurNode.next;
		}
		if(l1CurNode == null && l2CurNode == null){
			if(flag){
				cur.next = new ListNode(1);
			}
		}
		if(l1CurNode != null){
			subLink(l1CurNode, cur, flag); //修改连接关系
		}
		else{
			subLink(l2CurNode, cur, flag);
		}
		return head;
	 }
	private void subLink(ListNode l1CurNode, ListNode cur, boolean flag) {
		while(l1CurNode != null){
			int sum = l1CurNode.val;
			if(!flag){
				cur.next = l1CurNode;
				return;
			}
			if(flag){
				sum++;
				if(sum >= 10){
					sum = 0;
					flag = true;
					cur.next = new ListNode(sum);
					cur = cur.next;
					l1CurNode = l1CurNode.next;
				}else{
					flag = false;
					cur.next = new ListNode(sum);
					cur.next.next = l1CurNode.next;
					return;
				}
			}	
	}
		if(flag){
			cur.next = new ListNode(1);
		}	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值