前言:小白入門題解,演算法大佬可以直接跳過此部落格(大佬輕噴哈)
題源: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...