链表减法

本文探讨如何解决有序链表相减的问题,通过详细步骤解析算法实现过程,旨在帮助读者理解链表操作和数学计算的结合应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 有序链表相减问题:

 

package org.jyjiao;
import java.util.*;

public class SubLinkList {

	/*
	 * 算法思想: 在java中LinkedList的存储结构是链表形式的;插入或删除某个节点开销比较小
	 * while(!(直到ListA或者ListB到达链尾)){ 如果ListA的元素小于ListB的元素,ListA向后遍历;
	 * 如果ListA的元素大于ListB的当前元素,ListB向后遍历;
	 * 如果ListA的元素等于ListB的当前元素,ListA中删除该元素,ListA继续向后遍历 }
	 * 
	 */
	public void subLink(LinkedList<Integer> listA, LinkedList<Integer> listB) {
		Iterator<Integer> iterA = listA.iterator();
		Iterator<Integer> iterB = listB.iterator();

		int a = iterA.next().intValue();
		int b = iterB.next().intValue();
		while (true) {
			if (a < b) {
				while (a < b && iterA.hasNext()) {
					a = iterA.next().intValue();
				}
				if (a < b) {
					break;
				}
			} else if (a == b) {
				while (a == b && iterA.hasNext()) {
					iterA.remove();
					a = iterA.next().intValue();
				}
				if (a == b) {
					iterA.remove();
					break;
				}
			} else if (a > b) {
				while (a > b && iterB.hasNext()) {
					b = iterB.next().intValue();
				}
				if (a > b) {
					break;
				}
			}
		}

	}

	public static void main(String[] args) {
		SubLinkList subList = new SubLinkList();
		LinkedList listA = new LinkedList();
		LinkedList listB = new LinkedList();
		listA.add(new Integer(1));
		listA.add(new Integer(2));
		listA.add(new Integer(2));
		listA.add(new Integer(5));
		listA.add(new Integer(6));

		listB.add(new Integer(2));
		listB.add(new Integer(2));
		listB.add(new Integer(2));
		listB.add(new Integer(6));
		listB.add(new Integer(6));
		listB.add(new Integer(8));
		listB.add(new Integer(10));

		System.out.println("before sub:");
		System.out.println("listA:" + listA);
		System.out.println("listB:" + listB);
		System.out.println("-----------------------------");
		System.out.println("after sub:");
		subList.subLink(listA, listB);
		System.out.println("listA:" + listA);
		System.out.println("listB:" + listB);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值