java数据结构之单链表应用之一元多项式求和

一元多项式求和有一个特点就是改动特别大,如果用顺序表效率会特别低,所以为了提高效率优先选择链表进行求解。

利用java中单链表进行一元多项式求和,下面直接看案例分析:

package LinkedList;
import LinkedList.Elem.Node;
public class LinkedAdd {
	public Node add(Elem e1,Elem e2){
		Node pre=e1.getNode();
		Node qre=e2.getNode();
		Node p=pre.next;
		Node q=qre.next;
		Node result=p;
		while(p!=null && q!=null){
			if(p.exp<q.exp){
				pre=p;
				p=p.next;
			}else if(p.exp>q.exp){
				Node temp=q.next;
				pre.next=q;
				q.next=p;
				q=temp;
			}else{
				p.coef=p.coef+q.coef;
				if(p.coef==0){
					pre.next=p.next;
					p=pre.next;
				}else{
					pre=p;
					p=p.next;
				}
				qre.next=q.next;
				q=qre.next;
			}
		}
		if(q!=null){
			pre.next=q;
		}
		return result;
	}
	public static void main(String[] args) {
		Elem node1=new Elem();
		node1.insert(7,0);
		node1.insert(12,3);
		node1.insert(2,8);
		node1.insert(5,12);
		
		Elem node2=new Elem();
		node2.insert(4,1);
		node2.insert(6,3);
		node2.insert(2,8);
		node2.insert(5,20);
		node2.insert(7,28);
		LinkedAdd l=new LinkedAdd();
		Node node=l.add(node1, node2);
		while(node!=null){
			System.out.println("coef:"+node.coef+"      exp:"+node.exp);
			node=node.next;
		}
	}
}
class Elem{
	public class Node{
		public int coef;//系数
		public int exp;//指数
		public Node next=null;//下一个节点
		public Node(){
			coef=0;
			exp=0;
		}
		public Node(int coef,int exp){
			this.coef=coef;
			this.exp=exp;
		}
	}
	public Node first=new Node();
	public void insert(int coef,int exp){//添加节点
		Node node=new Node(coef,exp);
		if(first==null){
			first.next=node;
		}else{
			Node temp=first;
			while(temp.next!=null){
				temp=temp.next;
			}
			temp.next=node;
		}
	}
	public Node getNode(){
		return first;
	}
}

如果有什么不清楚或者有啥疑问意见可以加我QQ/微信  208017534  / qiang220316,欢迎一起交流一起进步。




  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基于单链表存储结构的一元多项式求和运算可以通过以下步骤实现: 1. 定义一个节点类,包含三个属性:系数(coefficient)、指数(exponent)和下一个节点(next)的地址。 2. 定义一个单链表类,包含一个头节点(head)。 3. 创建两个一元多项式单链表对象,分别存储两个多项式。 4. 对两个多项式的单链表进行遍历,将同一指数的项相加,并将结果存入一个新的单链表中。 5. 返回结果单链表对象。 具体实现可以参考以下Java代码: ``` public class Node { public double coefficient; // 系数 public int exponent; // 指数 public Node next; // 下一个节点的地址 public Node(double coefficient, int exponent) { this.coefficient = coefficient; this.exponent = exponent; this.next = null; } } public class LinkedList { public Node head; // 头节点 public LinkedList() { this.head = new Node(0, 0); // 创建头节点 } // 添加节点 public void addNode(double coefficient, int exponent) { Node node = new Node(coefficient, exponent); Node p = head; while (p.next != null && p.next.exponent > exponent) { p = p.next; } if (p.next != null && p.next.exponent == exponent) { p.next.coefficient += coefficient; } else { node.next = p.next; p.next = node; } } // 多项式求和 public LinkedList add(LinkedList list) { LinkedList result = new LinkedList(); Node p1 = this.head.next; Node p2 = list.head.next; while (p1 != null && p2 != null) { if (p1.exponent > p2.exponent) { result.addNode(p1.coefficient, p1.exponent); p1 = p1.next; } else if (p1.exponent < p2.exponent) { result.addNode(p2.coefficient, p2.exponent); p2 = p2.next; } else { double coefficient = p1.coefficient + p2.coefficient; if (coefficient != 0) { result.addNode(coefficient, p1.exponent); } p1 = p1.next; p2 = p2.next; } } while (p1 != null) { result.addNode(p1.coefficient, p1.exponent); p1 = p1.next; } while (p2 != null) { result.addNode(p2.coefficient, p2.exponent); p2 = p2.next; } return result; } } ``` 使用时,可以先创建两个多项式的单链表对象,然后调用add方法求和,最后遍历结果单链表输出即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值