5個常見的鍊錶操作

2021-08-29 08:01:36 字數 2697 閱讀 7729

時間複雜度 o(n),空間複雜度 o(1)

listnode reverselist

(listnode head)

return temp;

}

public

static node reverse

(node list)

currnode.next = prenode;

prenode = currnode;

currnode = nextnode;

}return headnode;

}

floyd 環判定法,使用在鍊錶中具有不同移動速度的指標,一旦它們進入環就會相遇,即表示存在環。

boolean

doeslistcontainsloop

(listnode head)

return

false

;}

public

static

boolean

checkcircle

(node list)

return fasle;

}

思路分析:在找到環後,初始化 slowptr 使其指向表頭節點。然後slowptr 和 fastptr 從各自的位置開始移動,每次只移動乙個節點,它們相遇的位置就是環的起始位置。(可以用這種方法刪除環)

listnode findberginofloop

(listnode head)}if

(loopexists)

return slowptr;

//返回環的開始節點

}return null;

//環不存在

}

有效,但是複雜度可能增加。

在找到鍊錶中存在環後,保持slowptr的指標不變,fastptr 指標繼續移動。每次移動 fastptr 指標時,計數器變數加 1 ,直到 再一次回到 slowptr 指標所在的位置。

// 時間複雜度 o(n),空間複雜度 o(1)

intfindlooplength

(listnode head)}if

(loopexists)

count++

;return count;

}return0;

}

// 第乙個 while 迴圈,將l1 和 l2 進行比較,誰小就合併到 listnode,直到l1 或者 l2 為空

// 第

二、三個 while 迴圈 將了l1 或者l2 剩下的節點合併到 listnode

listnode mergesortedlist

(listnode l1,listnode l2)

else

listnode = listnode.next;

}while

(l1 != null)

while

(l2 != null)

return head.next;

}

//分治思想,每次拿乙個小的出來,每次的動作相同

listnode mergelists

(listnode a,listnode b)

else

return result;

}

public

static node mergesortedlists

(node la,node lb)

else

node r = head;

while

(p != null && q!= null)

else

r = r.next;}if

(p != null)

else

return head;

}

public

static node deletelastkth

(node list,

int k)

if(fast == null)

return list;

node slow = list;

node pre = null;

while

(fast.next != null)

if(pre == null)

else

return list;

}

在鍊錶中對每個節點統計其後的節點的個數,然後判定其是否為中間節點。

時間複雜度 o(n^2),空間複雜度 o(1)

時間複雜度 o(n),空間複雜度 o(1)

讓第乙個指標的移動速度是另乙個的2倍,當第乙個到達表尾的時候,另乙個指標則指向中間節點。

listnode findmiddle

(listnode head)

if(i ==1)

}return slowptr;

}

public

static node findmidnode

(node list)

return slow;

}

5個常見的鍊錶操作

1.單鏈表反轉 leetcode對應題目 比較適合用頭插法,大致思路就是 首先判斷這個引數是不是null,如果是的話,那就直接返回null,如果不是的話,開始正常操作 建立三個新的結點,其中乙個當做新的頭結點,乙個指向原來的頭結點,另乙個起輔助作用。然後開始遍歷,在原來結點還存在的情況之下,開始不斷...

五個常見鍊錶操作

package cn.wangbo.list 這是鍊錶類,封裝了鍊錶節點資訊 public class node public node t val,node next 單鏈表反轉,只需要將每個結點的next指標指向其前驅結點。這個過程中,為了避免斷鏈,我們需要新建三個結點記錄當前結點 當前結點的前...

鍊錶的常見操作

include include includeusing namespace std typedef struct nodetype node typedef struct dnodetype dnode 建立單鏈表 node createlist node head node current he...