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();
}
}
}
运行的时候问题好多啊?求求高手指点指点。
/**
*
* @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();
}
}
}
运行的时候问题好多啊?求求高手指点指点。
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);
}
}
比如你这段
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;
}
head.next=intserter;
intserter.next=null;
} 个人觉得这里应该是:
intserter.next=head;
head=intserter;
这是两种不同的插入方式。
前者始终放链表的后面添加元素。【依次插入元素,a,b,c】链表的顺序是【a,b,c】;
后者每插入一个元素,都出现在队列的头部。【依次插入元素,a,b,c】链表的顺序是【c,b,a】;
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);
}
}
你这样写,只是个引用吧??
改变tmp 不就等于改变head??
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();
}
}