package com;
   /**
 * 
 * @author Hudejun
 * 
 */
class Link{

public Object obj;
Link next;


public Link(Object obj){ 
this.obj=obj;
next=null;
 
}
public void dispayLink(){
System.out.println(""+obj);
}

}


// ------------------------------------------
class LinkList{

private Link head;

// 空表
public LinkList(){
head=null;
}
    /**
 * 
 * @param obj
 */
public void listInsert(Object obj ){

Link intserter=new Link(obj);
if(head==null)
{
head=intserter;
return;
}
else{
head.next=intserter;
intserter.next=null;
}
}
/**
 * 
 * @param obj
 * @return
 */
public Link find(Object obj){
if (head==null){
return null;
}
else{
Link node;
node=head;
while(node.obj!=obj&&node!=null){
node=node.next;
}
return node;
}
}

/**
 * 
 * @param obj
 * @return
 */

public Link delete(Object obj){
   Link deleter=head;
   Link current=head;
   while(deleter.obj!=obj){
   
   if(deleter.next ==null){
   return null;
   }
   else{
 current=deleter.next; 
 deleter=deleter.next;
      
   }
   if(deleter==head){
   
   head=head.next;
   }
   
   else{
   current.next=deleter.next;
   }
   }
   return deleter;

}
/**
 * 
 * @param obj1
 * @param obj2
 * @return
 */
public Link correct(Object obj1,Object obj2){

Link correcter=find(obj1);

if (correcter==null){
return null;
}
else {
correcter.obj=obj2;

}
return correcter;
}
public void displayList(){

if(head==null){
return;
}
else{
while(head!=null){

System.out.println("the element are:"+head.obj);
head=head.next;
                   }

    }
}
class AppList{
public  void main(String[] args){

Object hudejun=new Student(11,"hudejun","man",89);
Object liwei=new Student(32,"liwei","man",92);
Object liyi=new Student(43,"liyi","woman",94);
Object zhuhaitao=new Student(42,"zhuhaitao","man",96);
Object zhangjia =new Student(51,"zhangjia","weman",93);
Object liqiang=new Student(16,"liqiang","man",94);
Object liucong=new Student(73,"liucong","man",91);
Link one=new Link(hudejun);
Link two=new Link(liwei);
Link three=new Link(liyi);
Link four=new Link(zhuhaitao);
Link five=new Link(zhangjia);
Link six= new Link(liqiang);
Link seven=new Link(liucong);
one.dispayLink();
two.dispayLink();
three.dispayLink();
four.dispayLink();
five.dispayLink();
six.dispayLink();
seven.dispayLink();
LinkList newList=new LinkList();
newList.listInsert(hudejun);
newList.listInsert(liwei);
newList.listInsert(liyi);
newList.listInsert(zhuhaitao);
newList.listInsert(zhangjia);
newList.listInsert(liqiang);
newList.listInsert(liucong);
newList.displayList();
newList.find(zhangjia);
Object quzhenlong=new Student(03,"quzhenglong","man",93.3);
newList.correct(zhangjia, quzhenlong);
newList.displayList();
newList.delete(quzhenlong);
newList.delete(liucong);
newList.displayList();
}


}
}

运行的时候问题好多啊?求求高手指点指点。


解决方案 »

  1.   

    你的listInsert方法是有问题的,从逻辑上来看,只是能存放第一个对象和最后一个对象。
      

  2.   

    Student 类忘了发,我用的是组合,Student是单独存在于package里面的。这个类没有问题。我的问题主要是LinkList的方法,哥哥们能给我解决一下吗?
    package com;class Student{

    private int id;
    private String name;
    private String sex;
    private double goal;

    /**
     * 
     * @param id  学生身份证号;
     * @param name 学生姓名;
     * @param sex  学生性别;
     * @param goal  学生成绩;
     */

    public   Student(int id,String name,String sex,double goal){

    this.id=id;
    this.name=name;
    this.sex=sex;
    this.goal=goal;
        }public void displayStudtent(){

    System.out.println("the basic of the student:"+id);
    System.out.println(""+name);
    System.out.println(""+sex);
    System.out.println(""+goal);
      }
    }
      

  3.   

    没有细看你的代码,不过还是发现了很多问题,在操作链表的时候,不要对head的值随便进行更改。
    比如你这段
    while(head!=null){ 
           System.out.println("the element are:"+head.obj); 
            head=head.next; 

    就更改head的值,这个时候你再也无法得到原来head的节点的位置。类似的问题,你的代码中还有很多,就不一一指出了。所以你在使用head引用之前,最好用个临时变量保存它的值,以便以后恢复。或者干脆使用临时变量操作你的逻辑。
    Link tmp = head;
    while(tmp != null){
     System.out.println("the element are:"+tmp.obj); 
            tmp=tmp.next; 
    }
      

  4.   

    else{
    head.next=intserter;
    intserter.next=null;
    } 个人觉得这里应该是:
    intserter.next=head;
    head=intserter;
      

  5.   


    这是两种不同的插入方式。
    前者始终放链表的后面添加元素。【依次插入元素,a,b,c】链表的顺序是【a,b,c】;
    后者每插入一个元素,都出现在队列的头部。【依次插入元素,a,b,c】链表的顺序是【c,b,a】;
      

  6.   

    你的链表感觉是向后加..我的是向前加的...
    public class LinkLine {
    private Link first;
    public LinkLine(){
    first=null;
    }
    public boolean isEmpty(){
    return (first==null);
    }
    public void insertFirst(String id,int value){
    Link newlink=new Link(id,value);
    newlink.next=first;
    first=newlink;
    }
    public int deleteFirst(){
    Link temp=first;
    first=first.next;
    return temp.data;
    }
    public void displayLinkList(){
    Link current=first;
    while(current!=null){
    current.displayLink();
    current=current.next;
    }
    }
    public boolean isContaintValue(int value){
    Link temp=first;
    while(temp!=null&&temp.data!=value){
    temp=temp.next;
    }
    return(temp!=null);
    }
    public boolean isContaintKey(String key){
    Link temp=first;
    while(temp!=null){
    if(temp.id.equals(key)){
    return true;
    }else{
    temp=temp.next;
    }
    }
    return false;
    }
    public Link find(String key){
    Link temp=first;
    while(temp!=null){
               if(temp.id.equals(key)){
                return temp;
               }else{
                temp=temp.next;
               }
    }
    return null;
    }
    public boolean deleteLineByKey(String key){
    Link temp=first;
    Link previous;
    if(temp.id.equals(key)){
    deleteFirst();
    return true;
    }else{
    previous=temp;
    temp=temp.next;
    while(temp!=null){
    if(temp.id.equals(key)){
    previous.next=temp.next;
    return true;
    }else{
    previous=temp;
    temp=temp.next;
    }
    }
    return false;
    }
    }
    }
    class Link{
    public String id;
    public int data;
    public Link next;
    public Link(String id,int data){
    this.id=id;
    this.data=data;
    }
    public void displayLink(){
    System.out.println("key:"+id+",  "+"data:"+data);
    }
    }
      

  7.   

    6楼说的对,你的displayList方法出了问题
      

  8.   

    Link tmp = head; 
    你这样写,只是个引用吧??
    改变tmp 不就等于改变head??
      

  9.   

    head要的就是一直指向表头吧...temp要循环指向下一个Link,来输出内容.不然的,应该displayLink一次就链表结果就会清空一次..最后head==null回归原始.
      

  10.   

    按照楼主的,改的package test;class Link { public Object obj;
    Link next; public Link(Object obj) {
    this.obj = obj;
    next = null; } public void dispayLink() {
    Student stud = (Student)obj;
    // 调用打印函数
    stud.displayStudtent();
    }}class Student{  private int id; 
    private String name; 
    private String sex; 
    private double goal;  /** 

    * @param id  学生身份证号; 
    * @param name 学生姓名; 
    * @param sex  学生性别; 
    * @param goal  学生成绩; 
    */  public  Student(int id,String name,String sex,double goal){  this.id=id; 
    this.name=name; 
    this.sex=sex; 
    this.goal=goal; 

    public void displayStudtent(){ 
    System.out.println("学生身份证号:"+ this.id +"  学生姓名:  " + this.name + "  学生性别:  " + this.sex + "学生成绩: " + this.goal ); 

    }// ------------------------------------------
    class LinkList { private Link head;
    private Link current;
    // 空表
    public LinkList() {
    head = null;
    } /**
     * 
     * @param obj
     */
    public void listInsert(Object obj) { Link intserter = new Link(obj);
    if (head == null) {
    current = intserter;
    head = current;
    return;
    } else {
    current.next = intserter;
    current = current.next;
    }
    } /**
     * 
     * @param obj
     * @return
     */
    public Link find(Object obj) {
    Link temp = head;
    if (temp == null) {
    return null;
    } else {
    while ( null != temp) {
    if(temp.obj == obj){
    return temp;
    }
    temp = temp.next;
    }
    return null;
    }
    } /**
     * 
     * @param obj
     * @return
     */ public Link delete(Object obj) {

    Link deleter = head;
    Link current = head;

    if( null == deleter ){
    return null;
    }

    // 为表头的情况
    if(deleter.obj == obj){
    head = head.next;
    deleter.obj = null;
    return head;
    }

    deleter = deleter.next;

    while( null != deleter && null != deleter.obj){
    if(deleter.obj == obj){
    current.next = deleter.next;
    deleter.next = null;
    deleter.obj = null;

    return head;
    }else{
    current = deleter;
    deleter = deleter.next;
    }
    }
    return null; } /**
     * 
     * @param obj1
     * @param obj2
     * @return
     */
    public Link correct(Object obj1, Object obj2) { Link correcter = find(obj1); if (correcter == null) {
    return null;
    } else {
    correcter.obj = obj2; }
    return correcter;
    } public void displayList() {
    Link temp = head;
    if (temp == null) {
    return;
    } else {

    System.out.println("the element are:");
    while (temp != null) {
    Student stud = (Student)temp.obj;
    // 调用打印函数
    stud.displayStudtent();
    temp = temp.next;
    } }
    }
    }
    public class AppList { public static void main(String[] args) { Object hudejun = new Student(11, "hudejun", "man", 89);
    Object liwei = new Student(32, "liwei", "man", 92);
    Object liyi = new Student(43, "liyi", "woman", 94);
    Object zhuhaitao = new Student(42, "zhuhaitao", "man", 96);
    Object zhangjia = new Student(51, "zhangjia", "weman", 93);
    Object liqiang = new Student(16, "liqiang", "man", 94);
    Object liucong = new Student(73, "liucong", "man", 91);
    Link one = new Link(hudejun);
    Link two = new Link(liwei);
    Link three = new Link(liyi);
    Link four = new Link(zhuhaitao);
    Link five = new Link(zhangjia);
    Link six = new Link(liqiang);
    Link seven = new Link(liucong);
    one.dispayLink();
    two.dispayLink();
    three.dispayLink();
    four.dispayLink();
    five.dispayLink();
    six.dispayLink();
    seven.dispayLink();

    System.out.println();
    System.out.println();
    System.out.println();

    LinkList newList = new LinkList();
    newList.listInsert(hudejun);
    newList.listInsert(liwei);
    newList.listInsert(liyi);
    newList.listInsert(zhuhaitao);
    newList.listInsert(zhangjia);
    newList.listInsert(liqiang);
    newList.listInsert(liucong);

    newList.displayList();
    newList.find(zhangjia);

    Object quzhenlong = new Student(03, "quzhenglong", "man", 93.3);
    newList.correct(zhangjia, quzhenlong);
    newList.displayList();

    newList.delete(quzhenlong);
    newList.delete(liucong);
    newList.displayList();
    }
    }