链表的操作

单链表

描述

单链表的节点数为n。

反转

头插法:遍历单链表约n次实现单链表反转

三指针法:1次遍历实现单链表反转。

三指针反转图示

链表的操作_第1张图片

三指针反转代码描述

while(tail!=null){
    middle.nextNode=head;
    head=middle,middle=tail,tail=tail.nextNode;
}

代码

public class singleLinkDemo {
    public static void main(String[] args){
        HeadNode myQueue=new HeadNode("001");
        for(int i=0;i<10;i++){
            myQueue.join(i);
        }
        myQueue.showQueue();

        myQueue.reverseLink();
        myQueue.showQueue();
    }
}

class HeadNode{
    String symbo1;
    Node nextNode=null;
    HeadNode(String  symbol){
        this.symbo1=symbol;
    }
    public void join(int num){
        //尾部添加
        Node joinNode=new Node(num);
        if(this.nextNode==null){
            this.nextNode=joinNode;
            return;
        }
        Node node=this.nextNode;
        while(node.nextNode!=null){
            node=node.nextNode;
        }
        node.nextNode=joinNode;
    }
    public void showQueue(){
       if(this.nextNode==null){
           System.out.println("链表已空");
       }
       Node node=this.nextNode;
       System.out.println("链表内容");
       while(node!=null){
           System.out.print(node.num+" ");
           node=node.nextNode;
       }
       System.out.println();
    }
    public void reverseLink(){
        Node head=this.nextNode;
        Node middle=head.nextNode;
        Node tail=middle.nextNode;
        head.nextNode=null;
        while(tail!=null){
            middle.nextNode=head;
            head=middle;
            middle=tail;
            tail=tail.nextNode;
        }
        middle.nextNode=head;
        this.nextNode=middle;
    }
}
class Node{
    int num;
    Node nextNode=null;
    Node(int num){
        this.num=num;
    }
}

运行结果

队列内容
0 1 2 3 4 5 6 7 8 9 
队列内容
9 8 7 6 5 4 3 2 1 0 

你可能感兴趣的:(链表,数据结构,java)