我有下面的代碼(正確爲我的簡單測試)的鏈接列表沒有重複,但我認爲它有點難看。鏈接列表沒有重複
任何人都可以推薦一個更清潔的方式來處理重複的代碼? 問題目前的段子:
if((val == cur->val) || (cur->next && (val == cur->next->val)))
但我認爲,一個更好的解決方案可能存在(我沒有看到),使用不同的用途比較運營商。
此外,有人可以給我一個「有用的」斷言或在這裏的建議。很難說什麼時候斷言,特別是如果你有if語句爲你做。
struct Node
{
Node(int v):val(v),next(NULL){}
int val;
Node * next;
};
void insert(Node ** ppHead, const int val)
{
if(ppHead == NULL)
return;
if(*ppHead == NULL || val < (*ppHead)->val)
{
Node * tmp = new Node(val); // new throws
tmp->next = *ppHead;
*ppHead = tmp;
}
else
{
Node * cur = *ppHead;
while(cur->next && (val > cur->next->val))
cur = cur->next;
if((val == cur->val) || (cur->next && (val == cur->next->val)))
return;
Node * tmp = new Node(val); // new throws
tmp->next = cur->next;
cur->next = tmp;
}
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
Node * list = NULL;
int x[] = { 5, 4, 6, 7, 1, 8, 1, 8, 7, 2, 3, 0, 1, 0, 4, 9, 9 };
int size = sizeof(x)/sizeof(x[0]);
for(int i = 0; i < size; i++)
insert(&list, x[i]);
Node * cur = list;
while(cur) {
printf (" %d", cur->val);
cur = cur->next;
}
printf("\n");
return 0;
}
也許你正在使用錯誤的數據結構作業。例如,您是否需要按特定順序存儲節點?如果不是,那麼使用哈希表或平衡二叉樹可以很容易地重寫代碼。 – Juliet 2009-09-01 19:27:47
感謝朱麗葉,但它是一個編碼威力的問題。 ;-)我不是一個真正的問題。 – teleball 2009-09-01 19:57:08