單向鍊錶操作

2021-06-25 07:35:35 字數 1732 閱讀 2501

今天花了一天時間把單向鍊錶的建立,增加,刪除,修改,查詢,遍歷等問題用c++實現了一遍,把以前好多模糊的地方,終於弄清楚了。現在把這些內容記錄下來。

1. 建立單向鍊錶結點

我們通常用乙個結構體表示鍊錶結點,如下:

struct listnode 

};

2. 插入新結點

bool insertlistnode(listnode* head, int pos, int data) 

listnode* p = head;

listnode* q = (listnode*)(malloc(sizeof(listnode))); //為新插入結點分配記憶體

q->data = data; //新插入結點資料為data

int count = 0;

if (pos >= 0)

} q->next = p->next; //開始插入q結點,讓p的後繼結點稱為q的後繼結點

p->next = q; //讓q成為p的後繼結點

return true;

} }

3.刪除指定結點

bool deletelistnode (listnode* head, int pos) 

int count = 0;

listnode* p = head;

if (pos > 1)

p = p->next;

}listnode* temp = p->next; //要定義乙個中間變數來儲存要刪除的結點,這樣才能釋放刪除結點所佔記憶體,從而防止記憶體洩露

p->next = temp->next;

free(temp);

//若這樣直接賦值p->next = p->next->next;會造成記憶體洩露

return true;

}}

4.查詢指定結點

bool findlistnode(listnode* head, int data) 

listnode* p = head->next;

while (p != null)

p = p->next;

}}

5.修改指定結點資料

bool modifylistnode(listnode* head, int data, int new_data) 

listnode* p = head;

while (p != null)

p = p->next;

}}

6. 迴圈遍歷鍊錶

void looplistnode(listnode* head) 

listnode* p = head;

while (p != null)

}

7.遞迴遍歷鍊錶

void recursivelistnode(listnode* head) 

std::cout << head->data;

recursivelistnode(head->next);

//如果將列印放在遞迴呼叫後面執行,則會實現鍊錶的逆序列印,原因是遞迴是用棧儲存中間變數的,利用了棧的後進先出原理

}

單向鍊錶的操作

1.單向鍊錶的建立 鍊錶建立後,其實,此時我們只可以知道head,而後通過head訪問每乙個節點成員。這是比較簡單的鍊錶,其中沒有其它的資訊了。如果需要建立有環的鍊錶,則將尾節點的next指標指向中間乙個節點即可。首先找到尾節點,而後將尾部節點的next指向中間乙個節點即可。如何判斷乙個鍊錶是否存在...

單向鍊錶的操作

include using namespace std typedef char elemtype 定義char型別的elemtype,方便修改 typedef struct lnode 定義乙個結構體 linklist void initlist linklist l void createlis...

單向鍊錶的操作

has head list.h ifndef has head list h define has head list h define crt secure no warnings include include include define debug format,do while 0 def...