單鏈表逆序掌握這兩種思路就夠了!!!

2021-09-11 05:28:43 字數 1751 閱讀 2841

閱讀本篇文章大約花費您4~5分鐘!

鍊錶是非常重要的一種資料結構,插入和刪除的效率都是o(1),但是查詢的效率比較低是o(n)。在單鏈表中,經常會遇到逆序單鏈表的題目,雖然聽起來很簡單,但是要想完整無誤的寫出**,還是有很多細節要注意的。

今天給大家介紹兩個思路來分析這個問題。

首先我們要知道單鏈表逆序的本質就是將節點的next指標指向它的前乙個節點;並且完成逆序操作,至少要知道三個節點才可以。這是我們繼續分析的基石。

假設有乙個單鏈表(節點數為4個),三個節點的引用分別為p1,p2,p3;

思路一的思想是知道三個節點,核心操作為p2.next=p1,然後三個節點依次向後移動,結束後再修改頭指標head。

結束的條件是p2==null。

我們可以用圖示的形式看一下這個過程:

結束後再將頭的next指向p1即可。

這種方法有乙個問題,也體現在圖中,在頭兩個節點間存在了環,因此遍歷時可能出現死迴圈,在**中應該將第乙個節點的next置為null。

/*單鏈表節點類*/

public class singlynode

public singlynode(t data)

public singlynode(t data,singlynodenext)

@override

public string tostring()

}

/*單鏈表逆序*/

public singlylist reverse(singlylistlist)

singlynodep1=list.head.next;

singlynodep2=list.head.next.next;

singlynodep3=null;

while(p2!=null)

p1=p2;

p2=p3;

} list.head.next=p1;

return list;

}

第二個思路和第乙個思路的不同之處在於不改變head和p1的引用,每次都直接將p2插入到head之後,也不會出現環,實現的原理如下圖:

這種方法的指標的指向比第一種稍微複雜一點,但是不會出現上面的環,並且head和p1都不會改變,只需要改變p2,p3即可。

這種方法需要注意指標的操作順序。

**如下:

/*單鏈表逆序*/

public singlylist reverse(singlylistlist)

singlynodep1=list.head.next;

singlynodep2=list.head.next.next;

singlynodep3=null;

while(p2!=null)

return list;

}

以上就是單鏈表的逆序的思路,歸根到底要記住逆序的本質,以及要充分理解指標指向的順序和含義。

希望大家面對單鏈表逆序的問題都能夠順序快速正確的解決!

單鏈表反轉 逆序的兩種方法

摘自 延伸閱讀 此文章所在專題列表如下 第01話 線性表的概念與定義 第02話 線性表的抽象資料型別adt定義 第03話 線性表的順序儲存結構 第04話 線性表的初始化 第05話 線性表的遍歷 插入操作 第06話 判斷線性表是否為空與置空操作 第07話 線性表的查詢操作 第08話 線性表刪除某個元素...

單鏈表建立的兩種方式

建立單鏈表 單鏈表就是一種特殊的結構體組合而成的資料結構,關於單鏈表的建立方式有很多種,大同小異。在這裡我們將詳細的介紹一下頭插法建立鍊錶和尾插法建立鍊錶。如上所示單鏈表就是由可能不連續的資料所組合而成的資料結構。其中每個資料分為兩部分,一部分是資料儲存的位置,稱為資料域 data 另外指標所儲存的...

關於單鏈表的兩種建立方式

第一種方式是將新建立的單鏈表結點加在煉表頭,這種方式要注意的是最先輸入的值是這個鍊錶尾的值 在 new linknode2 new linknode 1 第二種方式是將新建立的單鏈表結點加在鍊錶尾 include include typedef int datatype typedef struct...