從零開始演算法之路 移除鍊錶元素

2021-09-23 18:29:41 字數 1655 閱讀 8792

前言:小白入門題解,演算法大佬可以直接跳過此部落格(大佬輕噴哈)

題源:leetcode(

題目描述:

刪除鍊錶中等於給定值val的所有節點。

示例:

輸入: 1->2->6->3->4->5->6, val = 6

輸出: 1->2->3->4->5

解決方案一:非遞迴

思路(笨辦法,大佬輕噴):分四種情況考慮。特殊情況:鍊錶為空或者鍊錶只有乙個節點,並且節點值等於要移除元素的值,返回空;第一種情況,要移除的元素在頭節點;第二種情況,要移除的元素是中間節點(在頭節點和尾節點之間);第三種情況,要移除的元素在尾節點。情況考慮清楚,用相應的方法移除元素即可,具體方法看**。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

//特殊情況:鍊錶為空或者鍊錶只有乙個節點,並且節點值等於要移除元素的值,返回空

if(head == null || head->next == null && head->val == val )

return null;

//第二種情況,要移除的元素是中間節點(在頭節點和尾節點之間)

//定義兩個指標,pre 永遠在current 的前乙個節點

listnode *current = head;

listnode *pre = head;

while(current != null &¤t->next != null )

//如果current 指向最後乙個節點,跳出迴圈

if(current->next == null)

break;

//繼續尋找下個元素判斷是否為要移除鍊錶元素

current = current->next;

//保證pre 在current 的前乙個節點

if(current->val != val || pre->next != current)

pre = pre->next;

} // current 指向鍊錶最後乙個節點,

//第三種情況,要移除的元素在尾節點,移除尾節點

if( current->val == val)

pre->next = null;

return head;

}};

解決方案二:遞迴

思路:1.找終止條件:當head指向鍊錶為空,return

2.返回什麼值:應該返回的自然是已經移除指定元素鍊錶的頭節點

3.每一步要做什麼:巨集觀上考慮,此時head.next已經指向乙個去重的鍊錶了,而根據第二步,我應該返回乙個移除指定元素鍊錶的頭節點。因此這一步應該做的是判斷當前的head->val和val是否相等,如果相等則說明要移除,返回head.next,否則返回head

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

};

從零開始演算法之路 有序鍊錶去重

前言 小白入門題解,演算法大佬可以直接跳過此部落格 大佬輕噴哈 題源 leetcode 題目描述 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2示例 2 輸入 1 1 2 3 3 輸出 1 2 3解決方案一 遞迴套路 解題思路 找終止條件 當h...

從零開始演算法之路 合併兩個有序鍊錶

前言 小白入門題解,演算法大佬可以直接跳過此部落格 大佬輕噴哈 題源 leetcode 題目描述 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4解決方案 遞迴套路 合併兩個有序鍊錶 list...

從零開始的openstack之路

一 它是什麼,能幹什麼 openstack是乙個搭建雲平台的乙個解決方案 可以搭建公有雲,私有雲,企業雲。順便說一下,企業雲將是openstack的用武之地 二 openstack組成 openstack更像是經過計算機的72變之後的產物。包括 7個核心元件 compute 計算 object st...