总结下来主要的难度是确定当前的是否是最后一个元素,很多时候要将这种情况区分开来处理,有点麻烦。
其实链表的处理自我感觉还是比较简单的
public class test {public static void main(String[] args){SingleLinkedListHead head=new SingleLinkedListHead();head.add( new StudentNode( 1,"张三" ) );head.add( new StudentNode( 2,"李四" ) );head.add( new StudentNode( 3,"王五" ) );head.addByPosition( 2,new StudentNode( 4,"王五" ) );head.show();head.delete( 2 );head.show();head.update( 1,new StudentNode( 7,"test" ) );head.show();}
}
class SingleLinkedListHead{//头节点StudentNode head=new StudentNode( 0,"头结点" );//插入到尾部public void add(StudentNode studentNode){StudentNode temp=head;while(true){if(temp.next==null){break;}else{temp=temp.next;}}temp.next=studentNode;}//插入到指定位置public void addByPosition(int a,StudentNode studentNode){StudentNode temp=head;while(a>1){if(temp==null){System.out.println("插入错误,指定位置大于链表长度");}temp=temp.next;a--;}if(temp.next==null){temp.next=studentNode;}else{studentNode.next=temp.next;temp.next=studentNode;}}//输出链表public void show(){if(head.next==null){System.out.println("链表为空");return;}else {System.out.println( "链表输出如下" );StudentNode temp = head.next;while (true) {if (temp == null) {break;}System.out.println( temp );temp=temp.next;}}}//删除操作public void delete(int a){StudentNode temp=head;while(a>1){if(temp==null){System.out.println("删除错误,指定位置为空");}temp=temp.next;a--;}if(temp.next==null){System.out.println("删除错误,指定位置为空");}else{temp.next=temp.next.next;}}//修改操作public void update(int a,StudentNode studentNode){StudentNode temp=head;while(a>1){if(temp==null){System.out.println("修改错误,指定位置为空");}temp=temp.next;a--;}if(temp.next.next==null){temp.next=studentNode;}else{studentNode.next=temp.next.next;temp.next=studentNode;}}}
class StudentNode{int stuNo;String stuName;StudentNode next;public StudentNode(int stuNo,String stuName){this.stuNo=stuNo;this.stuName=stuName;}@Overridepublic String toString() {return "StudentNode{stuNo=" + stuNo +", stuName=" + stuName +"}";}
}