奇數值結點鍊錶:輸入若干個正整數(輸入-1為結束標誌)建立乙個單向鍊錶,頭指標為l,將鍊錶l中奇數值的結點重新組成乙個新的鍊錶new,並輸出新建鍊錶的資訊。
鍊錶結點定義:
struct listnode ;
函式介面定義:
struct listnode *readlist();
struct listnode *getodd(struct listnode **l);
函式readlist
從標準輸入讀入一系列正整數,按照讀入順序建立單鏈表。當讀到−1時表示輸入結束,函式應返回指向單鏈表頭結點的指標。
函式getodd
將單鏈表l
中奇數值的結點分離出來,重新組成乙個新的鍊錶。返回指向新煉表頭結點的指標,同時將l
中儲存的位址改為刪除了奇數值結點後的鍊錶的頭結點位址(所以要傳入l
的指標)。
思路分析
首先通過readlist讀入正整數。這裡要分兩種情況先後進行討論:1.原煉表為空;2.原煉表非空。
接著進行奇數值結點的分離。注意,該函式傳入的是l煉表表頭位址的位址(二重指標)。在處理時同樣分兩種情況先後進行討論。先處理l煉表表頭為奇數的情況,直到表頭不為奇數時,進入表頭非奇數情況的處理。每種情況在處理時,先將奇數重組成新鍊錶,再除去原煉表中的奇數。
源**
// 11-7
// 奇數值結點鍊錶
#include #include struct listnode ;
struct listnode *readlist();
struct listnode *getodd(struct listnode **l);
void printlist (struct listnode *l)
printf("\n");
}int main()
struct listnode *readlist()
else
tail = p;
scanf("%d", &data); }
return head;
}struct listnode *getodd(struct listnode **l)
else
tail = pnew;
// 刪除l鍊錶的奇數
ptr2 = *l;
*l = (*l)->next;
free(ptr2); }
if (*l==null)
// l鍊錶的head非奇數
ptr1 = *l;
ptr2 = (*l)->next;
while (ptr2!=null)
else
tail = pnew;
// 刪除l鍊錶的奇數
ptr1->next = ptr2->next;
free(ptr2);
} else
ptr2 = ptr1->next;
}
return head;
}
結果 習題11 7 奇數值結點鍊錶
習題11 7 奇數值結點鍊錶 20分 本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表 將鍊錶中奇數值的結點重新組成乙個新的鍊錶。鍊錶結點定義如下 struct listnode struct listnode readlist struct listnode getodd struct list...
習題11 7 奇數值結點鍊錶 20 分
本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表 將鍊錶中奇數值的結點重新組成乙個新的鍊錶。鍊錶結點定義如下 struct listnode 函式介面定義 struct listnode readlist struct listnode getodd struct listnode l 函式rea...
習題11 7 奇數值結點鍊錶 20分
本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表 將鍊錶中奇數值的結點重新組成乙個新的鍊錶。鍊錶結點定義如下 這題最後題目要返回新的鍊錶的頭結點,但是編譯錯誤,返回首元節點則對,不知道為什麼。struct listnode struct listnode readlist return head ...