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

2021-09-22 21:06:27 字數 2365 閱讀 3902

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

題源: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...