最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java單鏈表逆序用法代碼示例

 更新時間:2018年01月26日 15:54:07   作者:Marksinoberg  
這篇文章主要介紹了java單鏈表逆序用法代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本篇博客,比較簡單。對單鏈表逆序不理解的看看就可以了。

逆序思想

現(xiàn)假設(shè)有一鏈表,有待逆序操作。我們首先想到的就是將那個指針關(guān)系逆序了就行了唄。

事實上,就是這樣。博主就是以這個為目標(biāo)來完成的單鏈表逆序操作。

Node pre = null;
Node post = null;

while(head!=null){
 post = head.next;
 head.next = pre;
 pre = head;
 head = post;
}

這便是逆序的核心了。下面我們就來一步步的講解。

  • 首次逆序:

一開始的話,pre,post都設(shè)置為null。這是必須的,因為在head.next=pre這行代碼執(zhí)行完成后,我們原始的那個head節(jié)點的next將變成null,也就是我們整個鏈表的null了。

想象一下,原來的那個鏈表的最后面的next不也是一個null嗎?這里道理是一致的。

此時,更新pre為原來的head節(jié)點,也是為了下一步的逆序做準備,而head也自然的變成了原來的head.next了。

  • 不斷逆序。

抱歉,手抖了一下,畫錯了。大家見諒。手繪圖上的第五次示意pre節(jié)點應(yīng)該在節(jié)點5的位置,沒有了head。

從圖例中我們也不難看出,我們就是一次次的將head向后移,同時更新pre節(jié)點,來達到逆序的效果。

代碼

package list;
public class ReverseList {
	public static void main(String[] args) {
		Node head = new Node(1);
		int[] value = {2,3,4,5};
		Node temp = head;
		for (int i = 0 ; i< value.length;i++) {
			Node node = new Node(value[i]);
			temp.next = node;
			temp = temp.next;
		}
		printList(head);
		// 反序輸出一個單鏈表
		head = reverse(head);
		printList(head);
		// 再次反向
		head = reverseSingleList(head);
		printList(head);
	}
	public static void printList(Node head) {
		while(head!=null) {
			System.out.print("\t"+head.value);
			head = head.next;
		}
		System.out.println();
	}
	public static Node reverse(Node head) {
		Node pre = null;
		Node post = null;
		while(head!=null) {
			post = head.next;
			head.next = pre;
			pre = head;
			head = post;
		}
		return pre;
	}
	public static Node reverseSingleList(Node head) {
		Node pre = null;
		Node next = null;
		while(head!=null) {
			next = head.next;
			head.next = pre;
			pre = head;
			head = next;
		}
		return pre;
	}
}
class Node {
	public int value;
	public Node next;
	public Node(int value) {
		this.value = value;
	}
}

測試

經(jīng)測試,代碼輸出正確。

1 2 3 4 5
5 4 3 2 1
1 2 3 4 5

幫助理解,下面是另一個實例:

/** 
 * java 實現(xiàn)單鏈表的逆序 
 * @author Administrator 
 * 
 */
public class SingleLinkedReverse {
	class Node{
		int data;
		Node next;
		public Node(int data){
			this.data = data;
		}
	}
	public static void main(String[] args) {
		SingleLinkedReverse slr = new SingleLinkedReverse();
		Node head, tail;
		head = tail = slr.new Node(0);
		for (int i=1; i<10; i++){
			Node p = slr.new Node(i);
			tail.next = p;
			tail = p;
		}
		tail = head;
		while(tail != null){
			System.out.print(tail.data+" ");
			tail = tail.next;
		}
		head = reverse(head);
		System.out.println(" ");
		while(head != null){
			System.out.print(head.data+" ");
			head = head.next;
		}
	}
	private static Node reverse(Node head) {
		Node p1,p2 = null;
		p1 = head;
		while(head.next != null){
			p2 = head.next;
			head.next = p2.next;
			p2.next = p1;
			p1 = p2;
		}
		return p2;
	}
}

測試結(jié)果:

0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0

總結(jié)

以上就是本文關(guān)于java單鏈表逆序用法代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Spring框架學(xué)習(xí)之Spring?@Autowired實現(xiàn)自動裝配的代碼

    Spring框架學(xué)習(xí)之Spring?@Autowired實現(xiàn)自動裝配的代碼

    自動裝配就是說,你不用手動實現(xiàn)bean之間的組合關(guān)系,只要使用了@Autowired注解,程序就會自動的注入這個需要的bean,前提是你的Spring容器有這個bean,這篇文章主要介紹了Spring?@Autowired實現(xiàn)自動裝配,需要的朋友可以參考下
    2021-12-12
  • 詳解Java回調(diào)的原理與實現(xiàn)

    詳解Java回調(diào)的原理與實現(xiàn)

    回調(diào)函數(shù),顧名思義,用于回調(diào)的函數(shù)?;卣{(diào)函數(shù)只是一個功能片段,由用戶按照回調(diào)函數(shù)調(diào)用約定來實現(xiàn)的一個函數(shù)?;卣{(diào)函數(shù)是一個工作流的一部分,由工作流來決定函數(shù)的調(diào)用(回調(diào))時機。
    2017-03-03
  • Java 字符串的拼接詳解

    Java 字符串的拼接詳解

    本文主要介紹Java 字符串的拼接知識內(nèi)容,這里整理了相關(guān)資料,及簡單的示例代碼,有興趣的小伙伴可以參考下
    2016-08-08
  • springboot+feign+Hystrix整合(親測有效)

    springboot+feign+Hystrix整合(親測有效)

    本文主要介紹了springboot+feign+Hystrix整合,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • 解決IDEA中多模塊下Mybatis逆向工程不生成相應(yīng)文件的情況

    解決IDEA中多模塊下Mybatis逆向工程不生成相應(yīng)文件的情況

    這篇文章主要介紹了解決IDEA中多模塊下Mybatis逆向工程不生成相應(yīng)文件的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • java如何讀取resources目錄和同級目錄文件

    java如何讀取resources目錄和同級目錄文件

    介紹了Java中讀取resources目錄和同級目錄文件的方法,并討論了在IDE和發(fā)布環(huán)境中可能遇到的問題,通過測試發(fā)現(xiàn),執(zhí)行目錄可能會影響文件讀取,建議在使用`user.dir`時注意jar包的運行目錄問題
    2024-12-12
  • 解決StringBuffer和StringBuilder的擴容問題

    解決StringBuffer和StringBuilder的擴容問題

    這篇文章主要介紹了解決StringBuffer和StringBuilder的擴容問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 關(guān)于java命令的本質(zhì)邏輯揭秘過程

    關(guān)于java命令的本質(zhì)邏輯揭秘過程

    Java是通過java虛擬機來裝載和執(zhí)行編譯文件(class文件)的,java虛擬機通過命令java  option 來啟動,這篇文章主要給大家介紹了關(guān)于java命令的本質(zhì)邏輯揭秘的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-05-05
  • Java設(shè)計模式之享元模式

    Java設(shè)計模式之享元模式

    這篇文章主要為大家詳細介紹了Java設(shè)計模式之享元模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • SpringMVC文件上傳功能實例解析

    SpringMVC文件上傳功能實例解析

    這篇文章主要介紹了SpringMVC文件上傳功能實例解析,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03

最新評論

怀宁县| 忻州市| 临漳县| 龙江县| 石城县| 溧水县| 迁安市| 年辖:市辖区| 从江县| 德州市| 曲阳县| 安岳县| 蚌埠市| 清新县| 体育| 鄂伦春自治旗| 侯马市| 青岛市| 南江县| 奉节县| 大关县| 三穗县| 应城市| 赤水市| 新沂市| 永靖县| 墨脱县| 江川县| 吉木乃县| 汉沽区| 盐山县| 寿阳县| 张北县| 贵港市| 启东市| 洱源县| 灌南县| 微山县| 定襄县| 金坛市| 界首市|