順序單鏈表插入新節點的一種方法

2021-07-16 02:26:13 字數 1971 閱讀 8879

在學習鍊錶的時候我們都接觸過單鏈表插入新結點的問題。其中有一類就是在順序鍊錶中插入新節點,並保持鍊錶的遞增或者遞減性質。

最近看《c和指標》一書中提到了一種方法,我個人感覺不錯,並且思想非常好。

這是最常見的思維:

//sll_node.h

typedef struct node

node;

#include "sll_node.h"

#include #define true 1

#define false 0

// insertnode:把newvalue的值插入到遞增排序的鍊錶中,正確返回true,錯誤返回false

// rootp是鍊錶的頭指標。

int insertnode(node **rootp, int newvalue)

// 給新節點分配空間

newnode = (node *)malloc(sizeof(node));

if (newnode == null)

return false;

newnode->value = newvalue;

// 更改新節點的前驅和後繼節點

newnode->next = current;

if (previous == null) // 此時插入節點的為鍊錶中第乙個節點,修改頭指標

*rootp = newnode;

else

previous->next = newnode;

return true;

}

我以前編寫的時候也會用這樣的方法:乙個當前指標和指向當前指標之前的指標,這樣需要討論原鍊錶是否為空。書中提到了一種抽象,每次插入新的節點,都是改變乙個指向這個新節點的指標以及指向下乙個節點,這樣可以省略討論插入的節點是否為第乙個節點的步驟。**如下:

#include "sll_node.h"

#include #define false 0

#define true 1

// insertnode2:把newvalue的值插入到遞增排序的鍊錶中,正確返回true,錯誤返回false

// nextp是指向當前節點的指標,最初是頭指標

int insertnode2(node **nextp, int newvalue)

// 為新節點分配記憶體

newnode = (node *)malloc(sizeof(node));

if (newnode == null)

return false;

newnode->value = newvalue;

*nextp = newnode;

newnode->next = current;

return true;

}

main函式

#include #include #include #include "sll_node.h"

int insertnode(node **rootp, int newvalue);

int insertnode2(node **nextp, int newvalue);

int main()

node *p = head->next;

while (p != null)

getchar();

getchar();

return 0;

}

因為我個人沒有經過正經的課堂訓練,自己考研才接觸程式設計、資料結構之類的。看了很多對自學程式設計提的建議都是多編寫,並且要有抽象的思想,所以將這個方法寫了下來,可能對很對科班出身的人不算什麼問題了吧。

我感覺這個抽象很好,希望是給自己程式設計道路的乙個好的開端吧:)

同時,因為我在初學時發現測試**也會花費很多時間,所以將完成的**都貼了上來,而不僅僅是函式,希望也能幫助到更多的想我這樣的初學者吧。

向有序的環形單鏈表中插入新節點

向有序的環形單鏈表中插入新節點 乙個環形單鏈表從頭節點 head 開始不降序,同時由最後的節點指回頭節點。給定這樣乙個環形單鏈表的頭節點 head 和 乙個整數 num,請生成節點值為 num 的新節點,並插入到這個環形鍊錶中,保證調整後的鍊錶依然有序。輸入描述 環形單鏈表的頭節點 head 和 乙...

一種簡單的單鏈表逆序 反轉的方法

假定乙個單鏈表,其排列是這樣的 p1 p2 p3 其中,p1就是頭結點。反轉思路是 1 第一步反轉,p1和p2,也就是使得p2 next p1.如圖 p1 p2 p3 2 第二步,採用同樣的方式,反轉p3和p2,也就是使得 p1 p2 p3 既然是同第一步一樣的方式,就不能簡單地p3 next p2...

反射的另外一種方法

t instance default t type type typeof t system.reflection.constructorinfo constructorinfoarray type.getconstructors system.reflection.bindingflags.ins...