给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。 leetcode题2
题解:具体意思就是1-2-3 +2-6-7 3-8-0-1 就是反向相加
具体,图解:
具体解题思路:
两个链表数位置相加,进位
代码如下
package com.cxy.registersever.study; public class Demo { public static void main(String[] args) { ListNode node1 =new ListNode(2); node1.next =new ListNode(4); node1.next.next =new ListNode(3); ListNode node2 =new ListNode(5); node2.next =new ListNode(6); // node2.next.next =new ListNode(4); ListNode listNode = addTwoNumbers(node1, node2); System.out.println(listNode.next.val); System.out.println(listNode.val+""+listNode.next.val+""+listNode.next.next.val); } public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { //定义进位值 int right =0; // 定义头节点 ListNode node1 =new ListNode(0); // 定义节点零时变量 ListNode node =node1; // 接收l1的节点 ListNode l1Next =l1; // 接收l2的节点 ListNode l2next =l2; while(true){ // 判断l1的节点值为空 if (l1Next == null){ // 判断l2的节点值为空 if (l2next == null){ // 如果进位值为0 if (right==0){ break; } // 如果进位值不为0 node.next =new ListNode(right); break; } // 判断l2的节点值不为空 int val = l2next.val; // 判断l2的节点值+进位值大于10,代表还需要进位 if (val+right-10>=0){ node.next =new ListNode(val+right-10); // 接收点后移动 node =node.next; // 进位值 为1 right=1; }else{ //不大于时候 node.next =new ListNode(val+right); node =node.next; right =0; } // 节点后移 l2next =l2next.next; }else{ if (l2next == null){ int val =l1Next.val; if (val+right-10>0){ node.next =new ListNode(val+right-10); node =node.next; right=1; }else{ node.next =new ListNode(val+right); node =node.next; right =0; } l1Next =l1Next.next; }else{ int val =l1Next.val; int val2 =l2next.val; if (val+right+val2-10>=0){ node.next =new ListNode(val+right+val2-10); node =node.next; right=1; }else{ node.next =new ListNode(val+right+val2); node =node.next; right =0; } l1Next =l1Next.next; l2next =l2next.next; } } } return node1.next; } }
综合起来:可以知道这个题是训练if,else写的好不好的