Mọi người giúp em với ạ. em đang làm đề tài về cộng trừ nhân đa thức bằng danh sách liên kêt

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ctndathuc;

import java.util.Scanner;

/**
 *
 * @author DELL
 */
public class Ctndathuc {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Ctndathuc dt1= new Ctndathuc();
        Ctndathuc dt2= new Ctndathuc();
        dt1.nhapDaThuc();
        
    }

   

   

  

class Donthuc{
    public float heso;
    public int somu;
}
class Node{
    Donthuc info;
    Node next;
}
class Dathuc{
    Node head;
    Node tail;
}
Node getNode(Donthuc x){
    Node p = new Node();
    if(p == null){
        System.out.println("Khong du bo nho");
        return null;
    }
    p.info = x;
    p.next = null;
    return p;
}
public static void Khoitao(Dathuc L){
    L.head = null;
    L.tail = null;
}
public static void addhead(Dathuc L,Node p){
	if(L.tail== null){
	L.head = p;
	L.tail = p;
	}
	else{
	p.next = L.head;
	L.head = p;
}
}
public void Themdau(Dathuc L, Donthuc x){
    Node p = new Node();
    p = getNode(x);
    addhead(L, p);
}
 public static int Nhap(Donthuc x){
    Scanner sc = new Scanner(System.in);
    System.out.println("Nhập đơn thức: ");
    System.out.println("Nhập vào hệ số: ");
    x.heso = sc.nextFloat();
    System.out.println("Nhập vào số mũ: ");
    x.somu = sc.nextInt();
    return 0;
}
  public void nhapDaThuc(Dathuc L){
    Scanner sc = new Scanner(System.in);
	int n;
	Donthuc x = null;
	Node p = new Node();
	p = L.head;
	System.out.println("Nhập đa thức: ");
    System.out.println("Nhập số lượng của đa thức: ");
	n = sc.nextInt();
	for(int i=0;i<n;i++){
            System.out.println("Đơn thức: "+ (i + 1) + "=");
		Nhap(x);
		Themdau(L,x);
	}
}
public void Congdathuc(Dathuc L, Dathuc L1, Dathuc C){
	Node p , q;
	int cong;
	p=L.head;
	while(p != null){
		Themdau(C,p.info);
		p = p.next;
        }
		p = L1.head;
		q = C.head;
	while ( q != null){
		p=L1.head;
	while ( p != null){
		if(p.info.somu == q.info.somu)
                q.info.heso += p.info.heso; 
                p = p.next;
		}
		q = q.next;
	}
	p = L1.head;
	while( p != null){
	cong = 0;
	q = C.head;
	while ( q != null){
	if(q.info.somu == p.info.somu)
		cong = 1;
		q = q.next;
	}
	if(cong == 0)
	Themdau(C,p.info);
	p = p.next; 
    }
}
public void Trudathuc(Dathuc L, Dathuc L1, Dathuc T){
	Node p , q;
	int tru;
	p=L.head;
	while(p != null){
		Themdau( T, p.info);
		p = p.next;
	}
	p = L1.head;
	q = T.head;
	while(q != null){
        p=L1.head;
	while(q != null){
		if(p.info.somu == q.info.somu)
			q.info.heso -= p.info.heso; 
			p = p.next;
		}
		q = q.next;
        }
		p=L1.head;
		while (q != null){
	tru = 0;
	q = T.head;
	while (q != null){
		if(q.info.somu == p.info.somu)
            tru = 1;
		q = q.next;
        }
	if(tru == 0){
		p.info.heso *= -1;
		Themdau( T ,p.info);
		p.info.heso *= -1;
		}
		p = p.next; 
	}
}
public void Nhandathuc(Dathuc L, Dathuc L1, Dathuc N){
	Node p, q;
	int nhan;
	p= L.head;
	while( p != null){
		Themdau(N , p.info);
		p = p.next;
        }
        p = L1.head;
        q = N.head;
        while( q != null){
        p= L1.head;
        while ( p != null){
            q.info.heso *= p.info.heso; 
            q.info.somu += p.info.somu; 
            p = p.next;
        }
        q = q.next; 
    }
}
public void xuatdathuc( Dathuc L){
    Node p;
    p = L.head;
    while(p != null){
        System.out.println(p.info.heso +"x^"+ p.info.somu);
        if(p.next != null){
            System.out.println("+");
            p = p.next;
        }
    }
}
}