PTA 鍊錶學習 奇數值結點鍊錶

2021-10-11 04:25:54 字數 1446 閱讀 2985

struct listnode *

readlist()

//增加了乙個節點

else

exit(1

);//異常退出

if(head !=

null

)else head = q;

p = q;

}return head;

}struct listnode *

getodd

(struct listnode *

*l )

else

exit(1

);if(head1 !=

null

)else head1 = q;

p1 = q;

}else

else

exit(1

);if(head0 !=

null

)else head0 = q;

p0 = q;}(

*l)=

(*l)

->next;

}*l = head0;

//l儲存偶數值

return head1;

//返回奇數值

}

此解法是剛學習鍊錶時從網上找到的一種解法,具體思路為新建兩個鍊錶,然後將l鍊錶中的值各自放到對應鍊錶中,最後把偶數鍊錶的頭節點給(*l)。

此解法需要申請新的記憶體,若不能及時釋放會造成記憶體空間的浪費, 所以不能算是最優的演算法。

struct listnode *

readlist()

else

scanf

("%d"

,&a);}

tail->next =

null

;return head;

}struct listnode *

getodd

(struct listnode *

*l)else

if(prev ==

null

)else

else}}

else

p1 = p1->next;}if

(head1!=

null

)return head1;

}

此解法為學習鍊錶一周多後自己的解法,具體解法思路在**中,此解法是在沒有借鑑其他解法的情況下自己想出來的,雖然花費了好長時間思考,但著實能夠加強思考問題的邏輯性與考慮的全面性,也同時使我加深和鞏固了鍊錶的相關知識,美滋滋。

1.鍊錶中的指標主要是位址之間的指來指去,對鍊錶操作時應注意位址指向,像空節點(null)在指向下乙個節點時會發生越界(段錯誤)。

2.操作鍊錶要注意鍊錶的頭不能丟,丟了頭就找不到鍊錶啦。

3.注意整個過程的邏輯性與思考問題的全面性,問題複雜時建議先在紙上畫個簡單的例子,幫助思考過程中的判斷。

奇數值結點鍊錶

輸入樣例 1 2 2 3 4 5 6 7 1 輸出樣例 1 3 5 7 2 2 4 6 include include struct listnode struct listnode readlist struct listnode getodd struct listnode l void pri...

奇數值結點鍊錶

題目 本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表 將鍊錶中奇數值的結點重新組成乙個新的鍊錶。鍊錶結點定義如下 struct listnode 函式介面定義 struct listnode readlist struct listnode getodd struct listnode l 函式...

11 7 奇數值結點鍊錶

奇數值結點鍊錶 輸入若干個正整數 輸入 1為結束標誌 建立乙個單向鍊錶,頭指標為l,將鍊錶l中奇數值的結點重新組成乙個新的鍊錶new,並輸出新建鍊錶的資訊。鍊錶結點定義 struct listnode 函式介面定義 struct listnode readlist struct listnode g...