[求助] 如何连接串列多项式_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2415 | 回复: 1   主题: [求助] 如何连接串列多项式        下一篇 
东西南北
注册用户
等级:少校
经验:1161
发帖:16
精华:0
注册:2015-10-10
状态:离线
发送短消息息给东西南北 加好友    发送短消息息给东西南北 发消息
发表于: IP:您无权察看 2016-2-26 16:22:05 | [全部帖] [楼主帖] 楼主

想相加两个多项式用,用连接串列去解题,

但相加后,print的值却没跑出来,

是我里面add要回传的l3串列,没插入到n3的节点吗?


import java.util.*;
import java.io.*;
 
class  node{
  int con;
  int x_number;
  node next;
  node(int c1,int x1){
   this.con=c1;
   this.x_number=x1;
   this.next=null;
  }
    
}
 
class linkfun{
   node first;
   node last;
   boolean isempty(){
     return this.first==null;
   }
   
   void insert(node in){
     if(this.isempty()){
        first=in;
        last=in;       
     }else{
        last.next=in;
        last=in;
     }
   }
   
   void print(){
     node newnode=first;
     while(newnode!=null){
        if(newnode.con>0){
          System.out.print("+"+newnode.con+"X^"+newnode.x_number);
          newnode=newnode.next;
        }else if(newnode.con<0){
          System.out.print(+newnode.con+"X^"+newnode.x_number);
          newnode=newnode.next;        
        }
     }
   }
   
   linkfun add(linkfun l1,linkfun l2){
    linkfun l3=new linkfun();
    
    node n1,n2,n3;
    n1=l1.first;
    n2=l2.first;
    n3=new node(0,0);
    
    while(n1!=null){
      while(n2!=null){  
       if(n1.x_number==n2.x_number){
          n3.con=n1.con+n2.con;
          n3.x_number=n1.x_number;
          l3.insert(n3);           
          n1=n1.next;
          n2=n2.next;  
       }else if(n1.x_number>n2.x_number){
          n3.con=n1.con;
          n3.x_number=n1.x_number;
          l3.insert(n3);           
          n1=n1.next;  
       }else  if(n1.x_number<n2.x_number){
          n3.con=n2.con;
          n3.x_number=n2.x_number;
          l3.insert(n3);           
          n2=n2.next;   
       }
      } 
    }     
    return l3;
   }
}
 
public class NewClass2 {
    linkfun list1=new linkfun();
    linkfun list2=new linkfun();
    linkfun list =new linkfun();
    node n1,n2,n3,n4,n5,n6,n7;
    node s1,s2,s3,s4,s5,s6,s7;
    
    NewClass2(){
      n1=new node(8,8); 
      n2=new node(54,7);
      n3=new node(7,6);
      n4=new node(1,4);
      n5=new node(3,3);
      n6=new node(4,1);
      n7=new node(2,0);
      
      s1=new node(-2,9); 
      s2=new node(6,8);
      s3=new node(5,4);
      s4=new node(6,3);
      s5=new node(8,2);
      s6=new node(6,1);  
      s7=new node(9,0);         
    }
    
    void a(){
       System.out.print("原始多项式1:");
       list1.insert(n1);
       list1.insert(n2);
       list1.insert(n3);
       list1.insert(n4);
       list1.insert(n5);
       list1.insert(n6);
       list1.insert(n7);
       list1.print();
       
       System.out.println(" ");
       
       System.out.print("原始多项式2:");
       list2.insert(s1);
       list2.insert(s2);
       list2.insert(s3);
       list2.insert(s4);
       list2.insert(s5);
       list2.insert(s6);
       list2.insert(s7);
       list2.print();
       
       System.out.println(" ");       
       System.out.print("相加结果:");
        
       list.add(list1,list2);
       list.print(); 
    }
     
    public static void main(String args[]) throws IOException{
         NewClass2 c=new NewClass2();
         c.a();
    }
}





赞(0)    操作        顶端 
一个路过的
版主
等级:中校
经验:1970
发帖:34
精华:2
注册:2015-9-2
状态:离线
发送短消息息给一个路过的 加好友    发送短消息息给一个路过的 发消息
发表于: IP:您无权察看 2016-2-26 16:35:29 | [全部帖] [楼主帖] 2  楼

问题出在add的方法当中,

52行的n3是你用来作为新增计算后的节点用的,但是在add方法当中你只有new"一次"node物件,所以不管你怎么加,l3的串列只会有一个node

你应该把52行的程序码移到while循环里,让它可以在每一次计算之后,再建一个新的node来用。

 

第二点,注意你的add方法计算之后的l3return的,虽然不用任何变量去接受return也可以执行,但是这样就等于是把计算好的l3给丢掉了。这个地方一般来说就不会用l3

应该直接用this.insert( n3 ) 来做,因为呼叫add方法的本身就是你要用来计算出结果的l3你只需要把计算后的n3放到自身的串列中就好。

 

修改方法就是l3去掉,l3.insert()改用this.insert()或是你要用最简单的改法,130行的list.add ( list1,list2 )改成list=list.add ( list1,list2 )但是这样做就多了些多余的动作。 




赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论