題目描述
演算法分析
提交**(1):使用標誌位來判別不同情況
class solution
if (headflag)
else
else
}} return phead;
}};
提交**(2):建立乙個頭結點,避免phead被刪除的情況
class solution
listnode* temp = currnode;
currnode = currnode->next;
prenode->next = currnode;
delete temp;
}else
}return pnewhead->next;
}};
提交**(3):遞迴方法class solution
else
}};
測試**:
// ********************測試**********************
void test(char* testname, listnode* phead, int* expectedvalues, int expectedlength)
if (pnode == nullptr && index == expectedlength)
printf("passed.\n");
else
printf("failed.\n");
}// 某些結點是重複的
void test1()
; test("test1", phead, expectedvalues, sizeof(expectedvalues) / sizeof(int));
//destroylist(phead);
}// 沒有重複的結點
void test2()
; test("test2", phead, expectedvalues, sizeof(expectedvalues) / sizeof(int));
//destroylist(phead);
}// 除了乙個結點之外其他所有結點的值都相同
void test3()
; test("test3", phead, expectedvalues, sizeof(expectedvalues) / sizeof(int));
//destroylist(phead);
}// 所有結點的值都相同
void test4()
// 所有結點都成對出現
void test5()
// 除了兩個結點之外其他結點都成對出現
void test6()
; test("test6", phead, expectedvalues, sizeof(expectedvalues) / sizeof(int));
//destroylist(phead);
}// 鍊錶中只有兩個不重複的結點
void test7()
; test("test7", phead, expectedvalues, sizeof(expectedvalues) / sizeof(int));
//destroylist(phead);
}// 結點中只有乙個結點
void test8()
; test("test8", phead, expectedvalues, sizeof(expectedvalues) / sizeof(int));
//destroylist(phead);
}// 結點中只有兩個重複的結點
void test9()
// 空鍊錶
void test10()
int main(int argc, char* argv)
劍指offer 刪除鍊錶中重複的結點(鍊錶)
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 class solution listnode ans newlistnode 1 ans next phead listnode link a...
劍指Offer 鍊錶 刪除鍊錶中重複的結點
題目 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。注意該鍊錶為排序鍊錶,重複的節點不保留哦!public class listnode 1 遞迴 遞迴的方法就像是先判斷第乙個節點和之後的節...
劍指offer 刪除鍊錶中重複的結點
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 8 題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 解析 做這道題目給我的感覺是跟鍊錶反轉一樣,需要考慮節點之間指...