習題11 7 奇數值結點鍊錶(20 分)提問

2021-08-21 16:58:36 字數 1667 閱讀 1020

本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表、將鍊錶中奇數值的結點重新組成乙個新的鍊錶。鍊錶結點定義如下:

struct listnode ;
struct listnode *readlist();

struct listnode *getodd( struct listnode **l );

函式readlist從標準輸入讀入一系列正整數,按照讀入順序建立單鏈表。當讀到−1時表示輸入結束,函式應返回指向單鏈表頭結點的指標。

函式getodd將單鏈表l中奇數值的結點分離出來,重新組成乙個新的鍊錶。返回指向新煉表頭結點的指標,同時將l中儲存的位址改為刪除了奇數值結點後的鍊錶的頭結點位址(所以要傳入l的指標)。

#include #include struct listnode ;

struct listnode *readlist();

struct listnode *getodd( struct listnode **l );

void printlist( struct listnode *l )

printf("\n");

}int main()

/* 你的**將被嵌在這裡 */

1 2 2 3 4 5 6 7 -1
1 3 5 7 

2 2 4 6

//    odd = getodd(&l); // 取 址  才能傳輸資料嗎?? 是因為getodd 中無l的定義 必須用*l才能從外部資料傳輸? 

// printlist(odd); //prinlist 是為了輸出鍊錶數值重新 定義的函式

struct listnode *readlist()

else exit(1); //exit(1)是異常退出,比如你的**在出現不應該出現的分枝,要求終止程式的時候就用exit(1)

//即 q不應當為空

if(head!=null)

else head=q; //第一次執行while 時 這一步都會做

p=q; //把q的值交給p 使得下一次p->next=q; 起到q1 ->q2->q3->q4 的作用

}return head; //返回頭節點 有了頭 就可以輸出下面所有的資料

}struct listnode *getodd( struct listnode **l ) //二級指標?

else exit(1);

if(head1!=null)

else head1=q;

p1=q; // p1存奇數 head1

} //p0存偶數 head 0

else

else exit(1);

if(head0!=null)

else head0=q;

p0=q;

}*l=(*l)->next;

}*l=head0; //分離結束以後 l 儲存偶數的值

return head1; //返回奇數的值

}

習題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 ...

習題11 7 奇數值結點鍊錶 20分

無頭節點 本題答案 無頭節點 本題答案 struct listnode readlist return head 返回頭節點 有了頭 就可以輸出下面所有的資料 struct listnode getodd struct listnode l 二級指標?else head1 q p1 q p1存奇數 ...