欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode刷题

程序员文章站 2022-03-09 10:21:12
...

题目描述:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
 

package op;

public class Solution {
	 class ListNode {
		     int val;
		     ListNode next;
		     ListNode(int x) { val = x; }
		 
	 }
	 public void to(ListNode l) {
		 ListNode s=l;
		 String a="";
		 while(s!=null) {
			 a=a+s.val;
			 s=s.next;
		 }
		 StringBuffer buffer=new StringBuffer(a);
		 System.out.println(buffer.reverse());
	 }
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode res=new ListNode(0),resq=res;;
		ListNode p=l1,q=l2;
		int carry=0;
		while(p!=null||q!=null) {
			int i=(p!=null)?p.val:0;
			int j=(q!=null)?q.val:0;
			resq.val=(i+j+carry)%10;
			carry=(i+j+carry)/10;
			if(p!=null)
			p=p.next;
			if(q!=null)
			q=q.next;
			if(p!=null||q!=null) {
			resq.next=new ListNode(0);
			resq=resq.next;}
		}		
		if(carry==1)
			resq.next=new ListNode(1);
		return res;    
    }
	public static void main(String[] args) {
		Solution s=new Solution();
		// TODO Auto-generated method stub
		Solution.ListNode l1=s.new ListNode(2);
		l1.next=s.new ListNode(4);
		l1.next.next=s.new ListNode(3);
		Solution.ListNode l2=s.new ListNode(5);
		l2.next=s.new ListNode(6);
//		l2.next.next=s.new ListNode(4);
		s.to(l1);
		s.to(l2);
		s.to(s.addTwoNumbers(l1, l2));
		Solution.ListNode l3=s.new ListNode(9);
		l3.next=s.new ListNode(9);
		Solution.ListNode l4=s.new ListNode(1);
		s.to(l3);
		s.to(l4);
		s.to(s.addTwoNumbers(l3, l4));
	}
}

 采用哑结点做法

		ListNode res=new ListNode(0),resq=res;//采用哑结点
		int carry=0;//进位
		while(l1!=null||l2!=null||carry!=0) {
			int i=(l1!=null)?l1.val:0;
			int j=(l2!=null)?l2.val:0;
			resq.next=new ListNode((i+j+carry)%10);
			carry=(i+j+carry)/10;
			if(l1!=null)l1=l1.next;
			if(l2!=null)l2=l2.next;
			resq=resq.next;
		}
		return res.next;    

 

相关标签: 刷题 刷题