向單鏈表尾部插入元素
刪除單鏈表中第乙個值為x的節點
刪除單鏈表中的目標節點
從尾到頭列印單鏈表
單鏈表中倒數第k個節點
反轉單鏈表
k個一組反轉翻單鏈表
鍊錶是否有環以及環的入口
struct listnode
};
listnode*
inserttail
(listnode* phead,
int x)
listnode*
deletefirsttarget
(listnode* phead,
int x)
if(pnode !=
nullptr
) ppre-
>next = pnode-
>next;
return phead;
}
void
deletetargetnode
(listnode*
* phead, listnode* ptarget)
else
if(ptarget ==
*phead)
else
if(pnode !=
nullptr)}
}
//棧
vector<
int>
printlistfromtailtofront
(listnode* phead)
; vector<
int> vec;
stack> nodes;
listnode* pnode = phead;
while
(pnode !=
nullptr
)while
(!nodes.
empty()
)return vec;
}//遞迴
void
printlistfromtailtofront
(listnode* phead, vector<
int>
&vec)
vector<
int>
printlistfromtailtofront
(listnode* phead)
listnode*
findkthnodefromtail
(listnode* phead,
int k)
while
(pfast-
>next !=
nullptr
)return pslow;
}
//迭代
listnode*
reverselist
(listnode* phead)
return ppre;
}//遞迴
listnode*
reverselist
(listnode* phead)
listnode*
reversekgroup
(listnode* phead,
int k)
listnode* pnext = pright-
>next;
pair, listnode*
> result =
reverselist
(pleft, pright)
; ppre-
>next = result.first;
result.second-
>next = pnext;
ppre = result.second;
pleft = pnext;
}return phair-
>next;
}pair, listnode*
>
reverselist
(listnode* pleft, listnode* pright)
return
;}
//判斷是否有環
bool
hascycle
(listnode *phead)
return
false;}
//查詢環的入口
listnode *
detectcycle
(listnode *phead)
return pfast;}}
return
nullptr
;}
剩餘部分見 鍊錶相關演算法題 面試必備(二) 演算法題 鍊錶相關
題目 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。解析 由於只輸入了需要刪除的節點node,因此無法獲取刪除節點node的前乙個節點pre,從而也就無法將前乙個節點pre指向刪除節點的下乙個節點nex 既然無法通過修改指標完成,那麼肯定要修改鍊錶節點的值...
鍊錶相關演算法
l.add two numbers leetcode 2 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 4...
演算法(鍊錶相關)
以下是鍊錶的一些基礎題目,但是通過這些題目的組合和解決問題的方法可以解決鍊錶的複雜問題,如k個為一組進行鍊錶翻轉就需要翻轉鍊錶的方法,整理基本題目如下方便複習。1.合併兩個有序鍊錶,合併後還是有序鍊錶 class solution elseelseelseelseelseelseelse 給頭節點乙...