連結串列面試題(六)---刪除單連結串列倒數第k個結點
一、結構體定義
typedef int DataType;
typedef struct ListNode//定義結點
{
DataType data;
struct ListNode* next;
}ListNode,*PListNode;
typedef struct PList//定義一個成員是指向結點的指標的結構體
{
PListNode PHead;
}PList,*PList;
二、函式實現
(1)刪除單連結串列倒數第k個結點—(k >1&& k<連結串列總結點數)—O(N)
void DelKNode1(PList PList,int k)
{
PListNode front=NULL;
PListNode back=NULL;
PListNode del=NULL;
int i=0;
assert(PList);
front=PList->PHead;
back=PList->PHead;
if (PList->PHead==NULL)//如果是空連結串列
{
return ;
}
else //如果不是空連結串列,k>1 && K<連結串列總節點數
{
for(i=1;i<k;i++) //front先走到k-1步,由於不知道連結串列的總節點數,所以要時刻注意連結串列訪問越界
{
front=front->next;
}
while (front->next)
{
front=front->next;
back=back->next;
}
del=back->next;
back->data=del->data;
back->next=del->next;
free(del);
}
}
另一種寫法:
(2)刪除單連結串列倒數第k個結點(K任意–有可能出現不合理情況)
//6.1【6的加強版】刪除單連結串列倒數第k個結點(K任意--有可能出現不合理情況)---O(N)
void DelKNode2(PList PList,int k)
{
PListNode front=NULL;
PListNode back=NULL;
PListNode del=NULL;
int i=0;
assert(PList);
front=PList->PHead;
back=PList->PHead;
if (PList->PHead==NULL||k<=0)//如果是空連結串列或者k<=0
{
return ;
}
if (k==1&&PList->PHead->next==NULL)//如果結點數為1,k==1
{
free(front);
PList->PHead=NULL;
return;
}
if (k==1)//如果不是空連結串列,結點數>1,k==1
{
while (front->next->next)
{
front=front->next;
}
free(front->next);
front->next=NULL;
return;
}
else //如果不是空連結串列,k>1
{
for(i=1;i<k;i++) //front先走到k-1步,由於不知道連結串列的總節點數,所以要時刻注意連結串列訪問越界
{
if (front->next)
{
front=front->next;
}
else//當k的值大於結點個數
{
return ;
}
}
while (front->next)
{
front=front->next;
back=back->next;
}
del=back->next;
back->data=del->data;
back->next=del->next;
free(del);
}
}
相關文章
- 連結串列面試題(五)---尋找連結串列的倒數第k個結點O(N)面試題
- 單連結串列倒數第k結點輸出
- 19. 刪除連結串列的倒數第 N 個結點
- 劍指offer面試題15 連結串列中倒數第K個結點面試題
- 連結串列面試題(一)---刪除一個無頭單連結串列的非尾結點面試題
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- **24. 兩兩交換連結串列中的節點****19.刪除連結串列的倒數第N個節點****面試題 02.07. 連結串列相交****142.環形連結串列II**面試題
- leetcode每日一題—19.刪除連結串列的倒數第N個結點LeetCode每日一題
- Day 4 | 24. 兩兩交換連結串列中的節點 、 19.刪除連結串列的倒數第N個節點 、面試題 02.07. 連結串列相交 、142.環形連結串列II面試題
- 第四天:● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II面試題
- [每日一題] 第十三題:連結串列中倒數第k個節點每日一題
- Leetcode No.19 刪除連結串列的倒數第N個節點LeetCode
- LeetCode- 19 刪除連結串列的倒數第N個節點LeetCode
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 程式碼隨想錄第4天 | 24. 兩兩交換連結串列中的節點、19.刪除連結串列的倒數第N個節點、面試題 02.07. 連結串列相交、142.環形連結串列II面試題
- 連結串列面試題(十一)---求帶環單連結串列 環的入口點面試題
- 《Cracking the Coding Interview程式設計師面試金典》----連結串列中倒數第k個結點View程式設計師面試
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- LeetCode 刷題日記 19. 刪除連結串列的倒數第N個節點LeetCode
- 連結串列基礎2(超簡單)--單連結串列的插入和刪除
- 連結串列面試題(十三)---求兩個都不帶環的連結串列相交的結點面試題
- 連結串列-單連結串列實現
- LeetCode19題 刪除連結串列的倒數第N個節點 (c++ 遞迴)LeetCodeC++遞迴
- 連結串列面試題(四)---查詢連結串列的中間節點面試題
- 單向迴圈連結串列——查詢、刪除、插入結點
- 連結串列專題——面試中常見的連結串列問題面試
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 程式碼隨想錄演算法訓練營第4天 | 連結串列兩兩交換、刪除倒N、連結串列相交、環形連結串列演算法
- 程式碼隨想錄day4 | 24 兩兩交換連結串列節點 19 刪除倒數第n個節點 142 環形連結串列
- 04天【程式碼隨想錄演算法訓練營34期】 第二章 連結串列part02 (● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II )演算法面試題
- 連結串列面試題(九)---判斷一個連結串列是否帶環面試題
- 雙向連結串列————查詢、刪除、插入結點
- leetcode-019-刪除連結串列倒數第N個結點(Remove Nth Node From End of List)LeetCodeREM
- LCR 140. 訓練計劃 II 連結串列倒數第k個節點
- 程式碼隨想錄演算法訓練營day04|24.兩兩交換連結串列中的節點,19.刪除連結串列的倒數第N個節點,面試題 02.07.連結串列相交,142.環形連結串列II演算法面試題
- K個節點翻轉連結串列
- 程式碼隨想錄演算法訓練營第四天 | 連結串列 24.兩兩交換連結串列中的節點 19.刪除連結串列的倒數第N個節點 142.環形連結串列II演算法