欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 反轉(zhuǎn)帶頭結(jié)點的單鏈表并顯示輸出的實現(xiàn)過程

 更新時間:2021年11月12日 10:46:17   作者:吉吉女王  
這篇文章主要介紹了Java 反轉(zhuǎn)帶頭結(jié)點的單鏈表并顯示輸出,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

  注意:要保證已經(jīng)有Node類和單鏈表的初始化,這樣才能調(diào)用反轉(zhuǎn)方法并顯示結(jié)果。

方法如下:

//Node<T>指泛型結(jié)點類
public void reverse2(Node<T> head){
	Node<T> p=head.next;
	Node<T> q=head.next.next;
	head.next=null;
	p.next=null;
	while(q!=null){
		Node<T> temp=q.next;
		q.next=p;
		p=q;
		q=temp;
	}
	q=this.head;
	q.next=p;
    /*
    //想要直接在方法中遍歷輸出可以使用這段代碼   ***p是反轉(zhuǎn)后的第一個結(jié)點***
	for(Node<T> qq=p;qq!=null;qq=qq.next){//qq不能為q,因為結(jié)束循環(huán)后,p是最后一個結(jié)點,q是null
		System.out.print(qq.data+"\t");
	}
	*/
 
}

實現(xiàn)過程如圖所示:

在循環(huán)之前,先把head以及初始p的next斷掉,方便后面的循環(huán);循環(huán)中的q.next=p就是重定向,這一步把原來的next指向p;

不用q=q.next來使q向后移動,因為q結(jié)點的指針重指向后,q的next為空了,無法正確指向下一個結(jié)點。這時用temp結(jié)點來做一下過渡,在q指針重指向之前,把q的下一個結(jié)點賦給temp,即temp=q.next,在重指向后,用q=temp來向后移動;

p=q;q=temp就是往后移動一個結(jié)點,可以繼續(xù)重復(fù)循環(huán)。

循環(huán)結(jié)束時,q為空,p為最后一個結(jié)點,使q作為頭結(jié)點并指向p就完成了反轉(zhuǎn)。

整體代碼:

Node類:

public class Node<T>{
	public T data;
	public Node<T>next;
	
	public Node(T data,Node<T>next){
		this.data=data;
		this.next=next;
	}
	
	public Node(){
		this(null,null);
	}
	
	public String toString(){
		return this.data.toString();
	}
}

 單鏈表類:

public class SinglyList<T> {
public Node<T> head;
public SinglyList(){
	this.head=new Node<T>();
}
	public SinglyList(T[] values){
		this();
		Node<T> rear=this.head;
		for(int i=0;i<values.length;i++)
		{
			rear.next=new Node<T>(values[i],null);
			rear=rear.next;
		}
	}
 
//輸出方法
public String toString(){
		String str=this.getClass().getName()+"(";
		for(Node<T>p=this.head.next;p!=null;p=p.next)
		{
			str+=p.data.toString();
			if(p.next!=null)
				str+=",";
		}
		return str+=")";
	}
 
//反轉(zhuǎn)方法
public void reverse2(Node<T> head){
	Node<T> p=head.next;
	Node<T> q=head.next.next;
	head.next=null;
	p.next=null;
	while(q!=null){
		Node<T> temp=q.next;
		q.next=p;
		p=q;
		q=temp;
	}
	q=this.head;
	q.next=p;
    /*
    //想要直接在方法中遍歷輸出可以使用這段代碼   ***p是反轉(zhuǎn)后的第一個結(jié)點***
	for(Node<T> qq=p;qq!=null;qq=qq.next){//qq不能為q,因為結(jié)束循環(huán)后,p是最后一個結(jié)點,q是null
		System.out.print(qq.data+"\t");
	}
	*/
}
 
public static void main(String[] args) {
		Integer[] a={1,2,4,5,7};
SinglyList<Integer> sl=new SinglyList<>(a);
System.out.println(sl.toString());
sl.reverse2(sl.head);
System.out.println(sl.toString());
}
}

 輸出結(jié)果:

到此這篇關(guān)于Java 反轉(zhuǎn)帶頭結(jié)點的單鏈表并顯示輸出的實現(xiàn)過程的文章就介紹到這了,更多相關(guān)Java帶頭結(jié)點的單鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論