编辑代码

class Main {
	public static void main(String[] args) {
        //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
		//System.out.println("Hello world!   - java.jsrun.net ");

        // 定义链表 
        linkList link = new linkList();

        // 插入数据1、2、3、4、5,6//5,4,5
        for(int i = 1;i<7;i++){
            link.add(i, i);
        }
        Node head = link.getHead();
        Node p = head.next;
        Node newHead = p;
        while(p.next != null )
        {
            p = p.next;
        }
        p.next = newHead;
        
        System.out.println(newHead.getData());
        int j = 0;
        while(j<5){
            int i = 0;
            Node temp = newHead;
            Node parent = null;
            while(i < 4){
                parent = temp;
                temp = temp.next;
                i++;
            }
            // 删除temp节点
            parent.next = temp.next;
            newHead = temp.next;
            System.out.println(temp.getData());
            j++;
            //break;
        }
        System.out.println(newHead.getData());
        /*
        int step = 1;
        Node temp = newHead;
         System.out.println(temp.getData());
        while(step < 200){
           System.out.println(temp.getData());
            temp = temp.next;
            step++;
        }
        */


	}
}
class Node<T>{
    T data;
    Node<T> next;
    public Node(Node<T>n){
        next = n;
    }
    public Node(T obj, Node<T>n){
          data = obj;
          next =n;  
        }
    public T getData(){
        return data;
    }
    public Node<T> getNext(){
        return next;
    }

}

class linkList<T>{
    private Node<T>head;// 头节点
    private int length;// 存放单链表的长度
    public linkList(){
            length = 0;
            head = new Node<T>(null);
    }
    public Node<T>getHead(){
        return head;
    }
    public int getLength(){
        return length;
    }
    public boolean add(T obj, int pos){
        if((pos<1||pos>length+1)){
            System.out.println("pos值不合法");
            return false;
        }
        int num = 1;
        Node<T> p=head,q=head.next;
        while(num<pos){
            p=q;
            q=q.next;
            num++;
        }
        p.next = new Node<T>(obj,q);
        length++;
        return true;
    }
    // 单链表删除
    public T delete(int pos){
        // 若链表为空无法执行删除
        // 若 参数pos取值范围不合法无法执行删除
        int num = 1;
        Node<T> p=head, q= head.next;
        while(num < pos){
            p=q;
            q=q.next;
            num++;
        }
        p.next = q.next;
        length--;
        return q.data;
    }
    // 单链表的查找
    public int find(T obj){
        //若链表为空返回-1
        int num = 1;
        Node<T>p=head.next;
        while(p!=null){
            if(p.data.equals(obj)==false){
                p = p.next;
                num++;
            }
            else break;
        }
        if(p==null)
            return -1;
        return num;
    }
    public T value(int pos){
        	//如果链表为空返回null
	        if((pos<1||pos>length+1)){		
        		System.out.println("pos值不合法");
		    return null;
	        }
	        int num=1;
	        Node<T> q=head.next;
	        while(num<pos){		
		        q=q.next;
		        num++;
	        }
	        return q.data;	
    }

public boolean modify(T obj,int pos){		
        //如果链表为空返回false
	    if((pos<1||pos>length+1)){	
        	System.out.println("pos值不合法");
		    return false;
	    }
	    int num=1;
	    Node<T> q=head.next;
	    while(num<pos){			
		    q=q.next;
		    num++;
	    }
	    q.data=obj;	return true;		
    }

}