騰訊面試題 單鏈表的反轉

2021-10-05 20:34:20 字數 1559 閱讀 7008

鍊錶反**

建立乙個新的鍊錶,遍歷舊的鍊錶,每取出來乙個資料就按照頭插法的方式插入行的鍊錶。

直接在此鍊錶上操作,完成鍊錶的反轉。其實也是按照頭插法來加入節點的,先定義乙個輔助指標,指向第乙個節點,然後將頭結點的next置為空,最後用輔助指標遍歷鍊錶,每取出乙個元素就按頭插法鏈結到head。

我採用的是第一種方式。

**如下:

package com.guigu.linkedlistdemo;

public

class

reverselinkedlistdemo

// 反轉單鏈表,頭插法

public

static linkedlist reverselinkedlist

(linkedlist list)

// 建立乙個新的鍊錶

linkedlist newlist =

newlinkedlist()

; hnode cur = list.head.next;

// 讓cur指向鍊錶的第乙個節點

hnode temp = null;

// 輔助變數

// 遍歷舊鍊錶

while

(true

) temp = cur;

cur = cur.next;

// cur後移

// 根據頭插法插入節點

temp.next = newlist.head.next;

newlist.head.next = temp;

}return newlist;}}

// 定義乙個鍊錶類

class

linkedlist

public

void

add(hnode hnode)

// 定義乙個輔助接點

hnode temp = head;

boolean isflag =

false

;// 用來標明該節點是否已在鍊錶中存在

while

(true)if

(temp.next.no > hnode.no)

if(temp.next.no == hnode.no)

temp = temp.next;

// temp往後移}if

(isflag)

else

}// 遍歷鍊錶

public

void

list()

hnode cur = head.next;

// 輔助變數

while

(true

) cur = cur.next;

// cur後移}}

}// 定義乙個英雄的實現類即鍊錶的節點

class

hnode

@override

public string tostring()

}

執行截圖:

面試題 單鏈表反轉

問題 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。一 非遞迴演算法 假設有鍊錶a b c d e f g。在反轉鍊錶過程中的某一階段,其鍊錶指標指向為 a b c d e f g。也就是說在結點d之前的所有結點都已經反轉,而結點d後面的結點e開始的所有結點都沒有反轉。這樣...

鏈表面試題 反轉單鏈表

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null解決方案 頭插法開闢新鍊錶並逐個讀取舊鍊錶,頭插進新鍊錶,這樣新的鍊錶與原鍊錶的結構就是反的,需要借助輔助空間 definition for singly linked list.struct listnod...

開心IT面試題 單鏈表排序 反轉

一 單鏈表排序 仿照基於陣列的氣泡排序演算法 node sorting linklist node node node result int temp 0 int len length linklist node result node for int j 0 j len j result resu...