前言:小白入門題解,演算法大佬可以直接跳過此部落格(大佬輕噴哈)
題源:leetcode(
題目描述:
給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。
示例 1:
輸入: 1->1->2
輸出: 1->2
示例 2:
輸入: 1->1->2->3->3
輸出: 1->2->3
解決方案一:遞迴套路
解題思路:
找終止條件:當head指向鍊錶為空或只剩乙個元素的時候,自然是不可能重複的,因此return
返回什麼值:應該返回的自然是已經去重的鍊錶的頭節點
每一步要做什麼:巨集觀上考慮,此時head.next已經指向乙個去重的鍊錶了,而根據第二步,我應該返回乙個去重的鍊錶的頭節點。因此這一步應該做的是判斷當前的head和head.next是否相等,如果相等則說明重了,返回head.next,否則返回head
核心**:
//去重函式
listnode* solution::deleteduplicates(listnode *head)
完整**:
#includeusing namespace std;
struct listnode
};class solution
//去重函式
listnode* deleteduplicates(listnode* head) ;
//輸入函式
void input();
//輸出 鍊錶函式
void output();
//獲得頭節點
listnode* gethead()
};//輸入函式 初始化鍊錶
void solution::input()
} // 輸出鍊錶函式
void solution::output()
printf("\n輸出鍊錶結束!");
} //去重函式
listnode* solution::deleteduplicates(listnode *head)
int main()
解決方案二:非遞迴
解題思路:
1.定義兩個變數(first,second),first指向第乙個節點,second 指向第二個節點,
2.比較first指向節點的值和second指向節點的值,
3.如果這兩個值相等(如果不相等,使first指向該節點,重複2),則second指向下乙個節點,
直到找到和first指向節點不相等的節點,使first指向該節點,重複上述步驟2、3,直到鍊錶最後乙個節點 ,返回去重煉表頭結點
核心**:
//去重函式
listnode* solution::deleteduplicates(listnode *head)
//使first指向的下乙個節點指向second指向的節點
first->next = second;
// 使first指向的節點指向 second指向的節點
first = second;
} return head;
}
完整**:
#includeusing namespace std;
struct listnode
};class solution
//去重函式
listnode* deleteduplicates(listnode* head) ;
//輸入函式
void input();
//輸出 鍊錶函式
void output();
//獲得頭節點
listnode* gethead()
};//輸入函式 初始化鍊錶
void solution::input()
} // 輸出鍊錶函式
void solution::output()
printf("\n輸出鍊錶結束!");
} //去重函式
listnode* solution::deleteduplicates(listnode *head)
//使first指向的下乙個節點指向second指向的節點
first->next = second;
// 使first指向的節點指向 second指向的節點
first = second;
} return head;
}int main()
從零開始演算法之路 合併兩個有序鍊錶
前言 小白入門題解,演算法大佬可以直接跳過此部落格 大佬輕噴哈 題源 leetcode 題目描述 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4解決方案 遞迴套路 合併兩個有序鍊錶 list...
從零開始演算法之路 移除鍊錶元素
前言 小白入門題解,演算法大佬可以直接跳過此部落格 大佬輕噴哈 題源 leetcode 題目描述 刪除鍊錶中等於給定值val的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5解決方案一 非遞迴 思路 笨辦法,大佬輕噴 分四種情況考慮。特殊情況 鍊錶為空或者鍊錶只...
遞增有序鍊錶去重
題目 在乙個遞增有序的線性表中,有數值相同的元素存在,若儲存方式為單鏈表,設計演算法去掉數值相同的元素,使表中不再有重複的元素。分析 對於這類去重,我們肯定需要進行遍歷,而這道題給我們的是遞增有序的序列,我們便可以進行一一比較,後乙個元素與當前元素相同 時便刪除當前元素。如下 struct link...