時間複雜度 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...