构造链表,求和反转
程序员文章站
2022-05-18 18:08:28
还是要多练习输入输出啊。。。脱离leetcode就GG了。难受的呀老哥package sjms;public class testjd { static class ListNode{ ListNode next; int data; ListNode(int data){ this.data=data; } // 添加新的结点 public void add(int ....
还是要多练习输入输出啊。。。脱离leetcode就GG了。难受的呀老哥
package sjms;
public class testjd {
static class ListNode{
ListNode next;
int data;
ListNode(int data){
this.data=data;
}
// 添加新的结点
public void add(int newval) {
ListNode newNode = new ListNode(newval);
if(this.next == null)
this.next = newNode;
else
this.next.add(newval);
}
// 打印链表
public void print() {
System.out.print(this.data);
if(this.next != null)
{
System.out.print("-->");
this.next.print();
}
}
}
public static void main(String[] args) {
ListNode l1 = new ListNode(1); //创建链表对象 l1 (对应有参 和 无参 构造方法)
l1.add(2); //插入结点,打印
l1.add(3);
ListNode l2 = new ListNode(1); //创建链表对象 l2(对应有参 和 无参 构造方法)
l2.add(2); //插入结点,打印
l2.add(3);
//l1.print();
//l1= rev(l1);
// l1.print();
ListNode ans=new ListNode(-1);
ans=addnode(l1,l2);
ans.print();
}
//链表求和
private static ListNode addnode(ListNode a,ListNode b){
if(a==null) return b;
if(b==null) return a;
ListNode dummy=new ListNode(-1);
ListNode cur=dummy;
int carry=0;
int sum=0;
while (a!=null||b!=null){
//初始化sum
sum=0;
if(a!=null) {
sum+=a.data;
a=a.next;
}
if(b!=null){
sum+=b.data;
b=b.next;
}
sum+=carry;
carry=sum/10;
sum=sum%10;
cur.next=new ListNode(sum);
cur=cur.next;
}
if(carry!=0) cur.next=new ListNode(carry);
return dummy.next;
}
//反转链表
private static ListNode rev(ListNode head){
ListNode cur=null;
ListNode pre=head;
while(pre!=null){
ListNode t=pre.next;
pre.next=cur;
cur=pre;
pre=t;
}
return cur;
}
}
本文地址:https://blog.csdn.net/qq_27500493/article/details/107360811