輕鬆搞定鏈表面試題

2021-09-02 08:00:14 字數 2289 閱讀 5147

前言

檢查鍊錶**是否正確的邊界條件:

若煉表為 null,**是否正常執行?

若鍊錶只有乙個結點,**是否正常執行?

若鍊錶只有兩個結點,**是否正常執行?

**邏輯在處理頭結點和尾結點的時候,**是否正常執行?

鍊錶的構造及列印

private

static

class

node

}public

static

void

main

(string[

] args)

public

static

void

display

(node head)

system.out.

println()

;}public

static node init

(int start,

int exclusive)

return head.next;

}

單鏈表逆序
/**

* 單鏈表逆序

** @param head

*/public node reverse

(node head)

return prev;

}

合併兩個有序鍊錶
// 合併兩個有序鍊錶

public

static node mergetwosortlist

(node head1, node head2)

if(head2 == null)

// 哨兵節點

node head =

newnode(-

1); node p = head;

node h1 = head1;

node h2 = head2;

while

(h1 != null && h2 != null)

else}if

(h1 != null)

if(h2 != null)

return head.next;

}

刪除鍊錶倒數第 n 個結點

宣告快慢兩個指標,讓快指標走 n 步,再讓兩個指標同時後移,直到快指標到指向最後乙個結點時,慢指標的下乙個結點就是要刪除的結點。

public

static node removeinversenode

(node head,

int n)

node p = head;

node prev = head;

// 先讓 p 指標走 n 步

int i =0;

while

(i < n)

i++;}

// 剛好走了 n - 1 步,說明鍊錶只有 n 個節點

if(i == n -1)

// n 大於鍊錶長度的情況

if(p == null)

// 這個時候讓 p 和 prev 一起走

while

(p.next != null)

// p 和 prev 就是差 n 步的距離,這個時候 prev.next 正好是要被刪除的節點

prev.next = prev.next.next;

return head;

}

找出鍊錶的中間結點

宣告快慢指標,慢指標只遍歷乙個結點,快指標速度為 2 倍,當快指標指向鍊錶最後乙個結點,慢指標指向的即是鍊錶的中間結點。

public

static node findmiddlenode

(node head)

node prev = head;

node p = head;

while

(p != null && p.next != null)

return prev;

}

交換鍊錶相鄰元素
public

static

void

main

(string[

] args)

// 交換相鄰鍊錶元素值

public

static node swap

(node head)

return head;

}

可參考:7把鍊錶相鄰元素翻轉(交換值法、就地逆序)

鍊錶中環的檢測

參考:鍊錶中環的檢測

鏈表面試題

不改變鍊錶結構,從尾到頭列印單鏈表 遞迴實現 void printlistrevers recursively plist phead printf d phead data 當鍊表非常長的時候,遞迴實現的會導致函式呼叫層級很深,可能導致呼叫棧溢位。用棧不會出現此類情況,顯然用棧實現 的魯棒性會好一...

鏈表面試題

從尾到頭列印單鏈表 棧 遞迴 從尾到頭列印鍊錶 includevoid printtailtohead listnode head while s.empty 空間複雜度o n void printtailtoheadr listnode head cout data 刪除乙個無頭單鏈表的非尾結點 ...

鏈表面試題

typedef int datatype typedef struct node node,pnode,plist void initlist plist pplist void display const plist plist void pushback plist pplist,datatyp...