直播app原始碼,mybatis-plus分頁查詢
阿新 • • 發佈:2020-12-30
技術標籤:劍指offer連結串列指標leetcode資料結構
題目描述:
給定單向連結串列的頭指標和一個要刪除的節點的值,定義一個函式刪除該節點。
返回刪除後的連結串列的頭節點。
示例 1:
輸入: head = [4,5,1,9], val = 5
輸出: [4,1,9]
解釋: 給定你連結串列中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該連結串列應變為 4 -> 1 -> 9.
連結:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof
1. 雙指標法
借用兩個指標,cur
指標指向當前要刪除的節點,prev
cur
的前驅節點。
如圖:
程式碼:
程式碼未做節點釋放的工作,若頭節點為刪除節點時,釋放後,leetcode會判錯,所以就未進行釋放,中間節點均可釋放。
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(head == nullptr)
return nullptr;
if(head->val == val)//頭節點等於該值
return head->next;//返回頭的下一個
ListNode* cur = head;
ListNode* prev = nullptr;
while(cur != nullptr && cur->val != val)//在中間查詢節點
{
prev = cur;
cur = cur->next;
}
if(cur != nullptr)//這裡是避免要刪除的節點值不存在的情況,則不需要刪除
prev->next = cur->next;
return head;
}
};
2.遞迴
程式碼:
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(head == nullptr)
return nullptr;
if(head->val == val)
return head->next;
head->next = deleteNode(head->next, val);
return head;
}
};