给出两个表示两个非负整数的非空链表。数字以相反的顺序存储,它们的每个节点都包含一个数字。添加两个数字,并将其作为链接列表返回。

这篇博客探讨了如何处理两个非负整数的链表表示,数字存储在链表的节点中,逆序排列。文章内容涉及将这两个链表相加,最后以链表形式返回结果。

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

链表定义:

public class ListNode {
	int val;
	 ListNode next;
	 ListNode(int x) { val = x; }
	 
}
具体实现代码如下:

public class Test13 {
	 public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
	        ListNode prev = new ListNode(0);
	        ListNode head = prev;
	        int carry = 0;
	        while (l1 != null || l2 != null || carry != 0) {
	            ListNode cur = new ListNode(0);
	            int sum = ((l2 == null) ? 0 : l2.val) + ((l1 == null) ? 0 : l1.val) + carry;
	            //处理进位问题
	            cur.val = sum % 10;
	            carry = sum / 10;
	            prev.next = cur;
	            prev = cur;
	            
	            l1 = (l1 == null) ? l1 : l1.next;
	            l2 = (l2 == null) ? l2 : l2.next;
	        }
	        return head.next;
	    }
	 public static void main(String[] args) {
		
		 ListNode l1=new ListNode(2);
		 ListNode l2=new ListNode(4);
		 ListNode l3=new ListNode(3);
		 l1.next=l2;
		 l2.next=l3;
		
		 ListNode l4=new ListNode(5);
		 ListNode l5=new ListNode(6);
		 ListNode l6=new ListNode(4);
		 l4.next=l5;
		 l5.next=l6;
		 ListNode l7= Test13.addTwoNumbers(l1,l4);
		
		 while(l7!=null){
			 System.out.println(l7.val);
			 l7=l7.next;
		 }
	}
	 
}

 如果你有更好的解决方案,请加QQ群691761026交流


为了实现两个链表的相减操作,我们可以按照从低位到高位的顺序逐个计算每一位的差值,将结果保存在一个新的链表中。具体步骤如下: 1. 创建一个新的链表,用于存储相减结果。 2. 初始化两个指针分别指向两个链表的头节点。 3. 创建一个变量 borrow,用于记录借位情况,初始值为0。 4. 遍历两个链表,直到两个链表都为空。 4.1 获取当前节点的值,如果链表已经遍历完,则将该值设为0。 4.2 计算当前位的差值,加上前一位的借位。 4.3 如果差值小于0,则需要向高位借位,将 borrow 设置为1。 4.4 将差值的绝对值加入到新链表中,更新指针位置。 5. 如果最后一位存在借位(borrow=1),则在新链表的最高位添加一个值为1的节点。 6. 返回链表作为相减结果。 以下是一个示例的 Python 实现: ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def subtractTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode: dummy = ListNode() curr = dummy borrow = 0 while l1 or l2: val1 = l1.val if l1 else 0 val2 = l2.val if l2 else 0 diff = val1 - val2 - borrow if diff < 0: borrow = 1 diff += 10 else: borrow = 0 curr.next = ListNode(diff) curr = curr.next if l1: l1 = l1.next if l2: l2 = l2.next if borrow: curr.next = ListNode(1) return dummy.next ``` 希望以上解答能够满足你的需求。如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值