題目描述
輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。
題解
簡單一點的思路就是將該鍊錶的值用陣列或棧儲存下來,然後用一條新鍊錶儲存下來即可實現反轉。但是這種方法會消耗額外的空間,不是好方法。
一解:
public
static listnode reverselist
(listnode head)
stack
tempstack =
newstack
<
>()
;while
(head != null)
listnode resultlist =
newlistnode
(tempstack.
pop())
; listnode resulthead = resultlist;
while
(!tempstack.
isempty()
)return resulthead;
}
二解:
第二種就是把原鍊錶解開進行反轉鏈結,這種做法的時間複雜度為o(n),只需要有三個指標就可以實現。
public
static listnode reverselist
(listnode head)
listnode postnode = null;
listnode prenode = null;
while
(head != null)
return prenode;
}
下面用圖來講解一下如何操作的。 劍指Offer(十五) 反轉鍊錶
本系列文章為 劍指offer 刷題筆記。刷題平台 牛客網 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。這個很簡單,我們使用三個指標,分別指向當前遍歷到的結點 它的前乙個結點以及後乙個結點。include using namespace std typedef struct node node,li...
劍指offer(十五)之 反轉鍊錶
單鏈表的反轉有兩種方式 這裡講的不錯 核心思想就是 把pcur節點插入到dummy和它的下乙個節點之間 注意是dummy.next 不是prev 然後pcur向後推。分四步實現 第一步 為pcur的離開做準備,不然後面就丟了 prev.next pcur.next 可以看到,prev一直都是原來的h...
劍指offer 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。方法1 將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。方法2 使用三個指標遍歷單鏈表,逐個鏈結點進行反轉。方法3 從第2個節點到第n個節點,依次逐節點插入到第1個節點 head節點 之後,最後將第乙個節點挪到新錶的表尾。public class l...