單向鍊錶反轉

2021-09-26 20:37:38 字數 2924 閱讀 8299

一、鍊錶

鍊錶的結構是一種非線性的資料結構,優點是可以充分使用空間,插入和刪除節點的時候不需要遍歷節點速度較快,但是由於其特性在查詢的時候遍歷速度比較慢。每乙個節點在儲存自己的資料的時候,還儲存下乙個節點的物理位置。

可抽象為:

二、鍊錶反轉

1、新增物理儲存反轉

如圖:123

4null

第一步:生成乙個新的節點11

第二步:生成乙個新的節點2,並指向121

...依次類推,最終形成43

21null

偽**:

node reverselist(node header)

node node = header,tem = header;

while(null != tem->next)

return node;

}

可執行**

package com.example.demo;

/** * @author superstar zhao

* 反轉單向鍊錶

*/public class reversenode

public node getnext()

public void setnext(node next)

public int getvalue()

public void setvalue(int value)

}/**

* 初始化鍊錶

* @return

*/public node init()

/*** 鍊錶反轉方法

* @param header

* @return

*/public node reverselist(node header)

node node = new node(null,header.value),tmp = null;

while (null != header.next)

return node;

}/**

* 測試main方法

* @param args

*/public static void main(string args) }}

2、遍歷演算法

遍歷演算法比第一種演算法更為優秀的一點是不增加物理儲存

初始狀態

第一步:

第二步:

偽**:

node reverselist(node header)

if(null == header->next->next)

node nodem = header,nodep = header->next, noden = header->next->next;

while(null != noden)

nodep->next = nodem;

nodem = nodep;

nodep = noden;

noden = node->next;

}return nodep;

}

可執行**:

/**

* 鍊錶反轉方法

* @param header

* @return

*/public node reverselist(node header)

node nodem = header; node nodep = header.next; node noden = header.next.next;

while (null != noden)

nodep.setnext(nodem);

nodem = nodep;

nodep = noden;

noden = noden.next;

}/**

* 相容兩個節點

*/if(nodem.next == nodep)

nodep.setnext(nodem);

return nodep;

}

3、遞迴演算法

其中一種思想同第二種方法,是第二種方法衍生而來不做贅述;這裡重點描述另外一種方法。

解題思想,遍歷到最後乙個節點,逆向往回推

原模型:

第一步:

偽**:

node reverselist(node header)

node new = reverselist(header.next);

}

可執行**:

/**

* 鍊錶反轉方法

* @param header

* @return

*/public node reverselist2(node header)

node newnode = reverselist2(header.next);

header.next.setnext(header);

header.setnext(null);

return newnode;

}

單向鍊錶反轉

於 題目 已知單向鍊錶的頭結點head,寫乙個函式把這個鍊錶逆序 intel 解答 我們假設單向鍊錶的節點如下 這個題目算是考察資料結構的最基礎的題目了,有兩種方法可以解此題 方法一 這是一般的方法,總之就是用了幾個臨時變數,然後遍歷整個鍊錶,將當前節點的下一節點置為前節點。方法二 node tem...

反轉單向鍊錶

反轉單向鍊錶 實現反轉單向鍊錶和雙向鍊錶的函式。如 1 2 3 反轉後變成 3 2 1。輸入描述 第一行乙個整數 n,表示單鏈表的長度。第二行 n 個整數 val 表示單鏈表的各個節點。第三行乙個整數 m 表示雙鏈表的長度。第四行 m 個整數 val 表示雙鏈表的各個節點。輸出描述 在給定的函式內返...

鍊錶 反轉單向鍊錶

思路 從第二個元素開始。1 刪除當前元素。2 把當前元素放到頭結點位置。其中需要宣告3個變數 headnode 頭結點 prenode 前乙個結點 currentnode 當前結點 具體步驟如圖所示 實現 反轉單鏈表方法實現類 created by liujinjin on 17 1 19.publ...