中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-13 15:58:13 來源:腳本之家 閱讀:135 作者:Marksinoberg 欄目:編程語言

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

逆序思想

現假設有一鏈表,有待逆序操作。我們首先想到的就是將那個指針關系逆序了就行了唄。

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

Node pre = null;
Node post = null;

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

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

  • 首次逆序:

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

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

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

  • 不斷逆序。

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

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

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

代碼

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;
	}
}

測試

經測試,代碼輸出正確。

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

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

/** 
 * java 實現單鏈表的逆序 
 * @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;
	}
}

測試結果:

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

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛隆县| 南平市| 淮阳县| 迭部县| 清苑县| 津南区| 晋江市| 通河县| 凤城市| 噶尔县| 鲁山县| 林周县| 泸州市| 林芝县| 自治县| 临沧市| 泸西县| 德江县| 永州市| 东台市| 沈阳市| 青岛市| 荥阳市| 大渡口区| 壤塘县| 八宿县| 洮南市| 尤溪县| 扎鲁特旗| 宜宾县| 浙江省| 布尔津县| 龙南县| 清原| 双城市| 大悟县| 资中县| 新余市| 铅山县| 海南省| 皋兰县|