【Práctica de LeetCode】 2. Suma dos números

【Práctica de LeetCode】 2. Suma dos números

2. Suma dos números

Pregunta idea del algoritmo de enlace de origen
: lista enlazada;

PD: Java no tiene punteros; en la lista vinculada, el índice de ListNode que atraviesa hasta el final desaparecerá (como n1, n2), y ya no apuntará al micro final de la lista vinculada después de la instanciación. Necesita estar especialmente marcado, use p.next para la instanciación (generación de nuevos nodos de listas vinculadas)

código java

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    
    
    	int nums1 = 0;
    	int nums2 = 0;
    	ListNode res = new ListNode(0);
     	ListNode n1 = l1;//统计l1的长度
    	ListNode n2 = l2;//统计l2的长度
    	while (n1 != null) {
    
    
			nums1++;
			n1 = n1.next;
		}
    	while (n2 != null) {
    
    
			nums2++;
			n2 = n2.next;
		}
    	if(nums1 > nums2) {
    
    //保证l2长度更长
    		ListNode temp = l1;
    		l1 = l2;
    		l2 = temp;
    	}
    	res.next = l2;//运用res.next指向最后答案,方便输出;
    	int index = 0;//进位标志
        while (l1 != null) {
    
    //按照l1长度的进行计算
        	int temp = (l1.val + l2.val + index);//l1+l2数值计算
        	l2.val = temp % 10 ;
			index = temp / 10;
			l1 = l1.next;
			l2 = l2.next;
		}
        while (l2 != null && index == 1) {
    
    //计算l2剩余长度结点的计算
        	int temp = index + l2.val;
        	l2.val = temp % 10;
			index = temp / 10;
			l2 = l2.next;
			
		}
        if(index == 1) {
    
    //判断最后是否有进位
        	ListNode p = res.next;//p指针用来找到最后一个链表结点
            while(p.next != null) {
    
    
            	p = p.next;
            }//找到链表最后一个元素
            p.next = new ListNode(1);//添加进位的数值1
        }
        return res.next;
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_39457586/article/details/108648771
Recomendado
Clasificación