有序链表相减问题:
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);
}
}
分享到:
相关推荐
用C写的大数减法程序,整个程序用的是链表,有些不足之处请指教
测试过了,绝对好用,大家顶一下 以下是部分.h代码 typedef struct node { int data; struct node *next;...//完成两个链表减法操作返回指向|*p-*q|结果的指针 } void printint(NODE *s){ //打印链表 }
在本文中,我们将深入探讨如何使用链表来实现多项式加减法,主要基于C++编程环境。在数据结构的学习中,链表是一种基础且重要的数据结构,它能有效地处理动态变化的数据,非常适合用于表示多项式。在这个项目中,...
本主题主要关注如何使用双向链表来实现高精度加法和减法。双向链表是一种数据结构,它的每个节点不仅包含数据,还包含指向前一个节点和后一个节点的指针,这使得在链表中进行插入和删除操作相对简单。 在高精度加法...
在这个主题中,我们将探讨如何利用栈和链表的数据结构来实现长整形的加减法运算,有效避免溢出问题。 首先,让我们了解栈(Stack)和链表(Linked List)的基本概念。栈是一种后进先出(LIFO)的数据结构,适用于...
在计算机科学中,长整数加减法运算和双向链表是两个重要的概念,它们在数据处理和算法设计中有着广泛的应用。本文将详细探讨这两个主题,并结合它们在实际问题中的应用,帮助读者深入理解其原理和实现方法。 首先,...
因看到网上有需要长链表整形加减法的c++实现方法的朋友,借放寒假没事编写此程序以供大家参考,因鄙人编程水平有限,代码有些不简洁,而且为省事将LinkLong类的实现部分一同放到了.h文件中,不当之处请大家指正。...
用链表实现两个多项式相加的C语言源代码,两个多项式相加时,同类项的系数相加,无同类项的系数保持不变,想家完后再按升幂排序,结果放回链表中。是数据结构的作业,改编了网上的代码,运行结果正确。
本文档是关于一元多项式加法、减法和乘法实现的课程设计报告,主要关注在顺序结构和动态链表结构下的实现方法。设计目标是加深对数据结构的理解,尤其是如何选择合适的数据结构来解决问题,并能编写相关算法。设计...
根据给定文件的信息,我们可以总结出以下关于一元多项式在顺序结构与动态链表结构下的加法、减法及乘法实现的关键知识点。 ### 一、基础概念 #### 1.1 一元多项式定义 一元多项式是由一系列项组成的数学表达式,...
《C语言实现一元多项式加减法运算的链表方法》 在计算机科学中,数据结构和算法是解决问题的基础工具。本篇文章将探讨如何使用C语言通过链表实现一元多项式的加减法运算。这是一道适合初学者的链表实践题目,通过这...
本案例重点展示了如何利用顺序结构和动态链表结构实现一元多项式的加法和减法操作。下面我们将深入探讨这些知识点。 首先,一元多项式是由常数项和变量项组成的数学表达式,例如 `ax^n + bx^(n-1) + ... + cx^2 + ...
1. **加法和减法**: 对于一元多项式的加法和减法,我们可以遍历两个多项式的链表,对相同指数的项进行相应的加法或减法运算,然后将结果添加到新的链表中。如果两个多项式中存在一个没有对应指数的项,则直接将其...
本文将详细介绍如何用十字链表实现稀疏矩阵的加法、减法和乘法运算。 稀疏矩阵的十字链表结构由三部分组成:行链表、列链表和主对角线链表。每个链表节点包含非零元素的行号、列号和值。这种结构可以快速定位和访问...
(1) 利用链表实现长整数的存储,每个节点含一个整型变量; (2) 整型变量的范围:-(2^15 -1)~(2^15 -1); (3) 输入与输出形式每四位一组,组间用逗号分隔开。如:1986,8213,1935,2736,3299; (4) 界面...
通过链表实现长整数的加减法,不仅可以有效地处理任意长度的整数运算,还可以利用链表的动态特性灵活地添加或删除节点,从而适应各种长度的数字。此外,双向链表的使用使得进位和借位的处理更加高效,避免了不必要的...
实现大数加法、减法、乘法和除法的关键在于理解基本的算术运算规则,并将其应用到链表上。以下是一些关键步骤: 1. **大数加法**:遍历两个链表,逐位相加。如果某位相加大于9,则进位到下一位置。同时,由于链表...
本项目通过链表和数组两种数据结构来实现大数的加减乘除操作,旨在深入理解数据结构与算法的运用。 ### 链表实现大数 1. **链表基础知识**:链表是一种线性数据结构,它的元素在内存中不是顺序存放的,而是通过...
本文将深入探讨如何使用单链表来处理多项式的加法、减法、求导和求值等数学操作。首先,我们需要了解单链表的基础知识。 单链表是一种线性数据结构,每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而...
在本实验中,我们利用双向循环链表来实现长整数的存储和四则运算,特别是加法和减法。这种数据结构的选择主要是因为它能够方便地处理长整数的存储和运算过程中的进位和借位操作。 首先,双向循环链表的每个节点仅...