Java 反轉(zhuǎn)帶頭結(jié)點的單鏈表并顯示輸出的實現(xiàn)過程
注意:要保證已經(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)文章
使用Spring Data Redis實現(xiàn)數(shù)據(jù)緩存的方法
目前在系統(tǒng)架構(gòu)設(shè)計中使用Redis實現(xiàn)緩存,這篇文章主要介紹了使用Spring Data Redis實現(xiàn)數(shù)據(jù)緩存的方法,具有一定的參考價值,需要的朋友可以參考下2018-11-11
基于Java HttpClient和Htmlparser實現(xiàn)網(wǎng)絡(luò)爬蟲代碼
這篇文章主要介紹了基于Java HttpClient和Htmlparser實現(xiàn)網(wǎng)絡(luò)爬蟲代碼的相關(guān)資料,需要的朋友可以參考下2015-12-12
SpringBoot定時任務(wù)兩種(Spring Schedule 與 Quartz 整合 )實現(xiàn)方法
本篇文章主要介紹了SpringBoot定時任務(wù)兩種(Spring Schedule 與 Quartz 整合 )實現(xiàn)方法,詳細(xì)的介紹了Spring Schedule 與 Quartz 整合的兩種方法,有興趣的可以了解一下。2017-03-03
Java的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)
下面小編就為大家?guī)硪黄狫ava的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
泛談Java中的不可變數(shù)據(jù)結(jié)構(gòu)
開發(fā)人員通常認(rèn)為擁有final引用,或者val在Kotlin或Scala中,足以使對象不可變。這篇博客文章深入研究了不可變引用和不可變數(shù)據(jù)結(jié)構(gòu),下面小編來和大家一起學(xué)習(xí)它2019-05-05

