11 7 奇數值結點鍊錶

2021-09-10 22:55:11 字數 1734 閱讀 1699

奇數值結點鍊錶:輸入若干個正整數(輸入-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 ...