单链表相加

public class SingleLinkList {

	private static class Data{
		private int obj;
		private Data next;
		Data() {
		}
		Data(int obj){
			this.obj = obj;
		}
		public  void display() {
			if (this==null) {
				System.out.println("empty!!");
			}
			Data current = this;
			while (current!=null) {
				System.out.print(current.obj+" -> ");
				current = current.next;
			}
			System.out.println();
		}
		public void insertLast(int obj) {
			Data data = new Data(obj);
			if(this.obj==0){
				this.obj = obj;
				return;  /*由于每次是增加一个节点,所以对头结点进行初始化之后就要退出函数*/
			}
			Data last = this;  /*一般一个链表的头结点是不能动的,因此需要把头结点赋值给一个临时变量
			这样在对链表进行访问的时候,就可以用这个临时变量进行逐个的访问,不对头结点产生影响*/
			while(last.next!=null){
				last = last.next;
			}
			last.next = data;
		}
	}
	private static Data addTwoLinkData(Data data1,Data data2) {
		if (data1==null||data2==null) {
			return null;
		}
		//保存节点返回用
		Data data3 = new Data();
		int flag = 0;
		int sum = 0;
		while (data1!=null&&data2!=null) {
			sum = data1.obj+data2.obj;
			if (sum<10) {
				if (flag==1) {
					if (sum+1==10) {
						flag = 1;
						data3.insertLast(sum+1-10);
					}else{
						flag = 0;
						data3.insertLast(sum+1);
					}
				}else{
					flag = 0;
					data3.insertLast(sum);
				}
			}
			if (sum>=10) {
				if (flag==1) {
					data3.insertLast(sum+1-10);
				}else{
					data3.insertLast(sum-10);
				}
				flag = 1;
			}
			data1 = data1.next;
			data2 = data2.next;
		}
		if (data1==null&&data2!=null) {
			if (flag==1) {
				int s = data2.obj+1;
				if (s<10) {
					flag=0;
					data3.insertLast(s);
				}else{
					flag = 1;
					data3.insertLast(s-10);
				}
			}else{
				data3.insertLast(data2.obj);
			}
		}
		if (data2==null&&data1!=null) {
			if (flag==1) {
				int s = data1.obj+1;
				if (s<10) {
					flag=0;
					data3.insertLast(s);
				}else{
					flag = 1;
					data3.insertLast(s-10);
				}
			}else{
				data3.insertLast(data1.obj);
			}
		}
		//最后一位有进位,创建一个新节点
		if (flag==1) {
			data3.insertLast(1);
		}
		return data3;
	}
	public static void main(String[] args) {
		//测试程序,链表1:1->8->3->6,链表2:1->2->3->4
		Data data1 = new Data();
		data1.insertLast(1);
		data1.insertLast(8);
		data1.insertLast(6);
		data1.insertLast(6);
		data1.display();
		Data data2 = new Data();
		data2.insertLast(1);
		data2.insertLast(2);
		data2.insertLast(3);
		//data2.insertLast(3);
		data2.display();
		Data data3 = new Data();
		data3 = addTwoLinkData(data1, data2);
		//打印我们返回的链表结果
		data3.display();
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值