一、鍊錶
鍊錶的結構是一種非線性的資料結構,優點是可以充分使用空間,插入和刪除節點的時候不需要遍歷節點速度較快,但是由於其特性在查詢的時候遍歷速度比較慢。每乙個節點在儲存自己的資料的時候,還儲存下乙個節點的物理位置。
可抽象為:
二、鍊錶反轉
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...