1、定義鏈表節點(diǎn)結構體
typedef struct Node { int data; // 數據域 struct No??de *next; // 指針域,語(yǔ)言建指向下一個(gè)節(jie)點(diǎn)} Node;2、立多初始化鏈表
Node *initList() { Node *head = (Node *)??malloc(sizeof(Node));?? // 分配內存空間 head->next = NU(′?_?`)LL; // 頭節點(diǎn)的個(gè)動(dòng)指針域指向NULL return head;}3(°□°)、在鏈表尾部插入節點(diǎn)
void insertNode(Node *head,態(tài)鏈 int data) { Node *newNode = (Node *)malloc(sizeof(Node)); // 分配內存空間 newN??ode->data = data; // 設置數據域 newNode->next = NULL; // 設置指針域指向NULL Node *temp = head; // 用一個(gè)臨時(shí)(?⊿?)變量遍歷鏈表,找到尾節點(diǎn)? while (temp(╬?益?)->next != NULL) { temp = temp->next; } temp->ヽ(′▽?zhuān)?ノ;next = newNod??e; // 將新節點(diǎn)插入到尾節點(diǎn)的函???數指針域中}4、從鏈表中刪除節點(diǎn)
voi(′_ゝ`)d deleteNo( ?ヮ?)de(Node *head, int data) { Nod??e *temp = head; // 用一個(gè)臨時(shí)變量遍歷鏈表,找到要刪??除的節點(diǎn)的前一個(gè)( ?ω?)節點(diǎn) while (temp != NULL && temp->??;next-??>data != dataヾ(′▽?zhuān)??) { temp = temp->next; } if (temp != NULL && temp->next != NULL) { // 如果找到了要刪除的節點(diǎn)且不是頭節點(diǎn)和尾節點(diǎn) Node *delNode = temp->next; // 將要刪除的節點(diǎn)保存在一個(gè)臨時(shí)變量中 temp->next = delNode->next; // 將要刪除的節點(diǎn)從鏈表中刪除,將指針域指向下一個(gè)ヽ(′?`)ノ節點(diǎn) free(delNode); // 釋放內存空間 }}5、打印鏈表
void printList(Node *head) { Node *temp = head->next; // 用一個(gè)臨時(shí)變量遍歷鏈表,從頭節點(diǎn)(dian)開(kāi)始打印 while (temp != NU(◎_◎;)LL) { printf("%d ", temp->data); // 打印數據域的數據 temp = temp->next; // 將臨時(shí)變量指向下一個(gè)節點(diǎn),繼續打(da)印 } printf(""); // 打印換行符,表(′;д;`)示鏈表??結束}1ヽ(′ー`)ノ、如何釋放動(dòng)態(tài)鏈表占用的內存?
答??:在刪除鏈表中的節點(diǎn)后,需要使用free函數釋放該節點(diǎn)占用的內存空間,還需要遞歸地調用deleteList函數,釋放整個(gè)鏈表占用的所有內存空間,注意,在遞歸調用deleteList函數時(shí),需要傳遞頭節點(diǎn)作為參數,以便正確地遍歷整個(gè)鏈表。
答:可以使用歸并排序的思想,將兩個(gè)有序鏈表分別進(jìn)行(xing)排序,然后按照升序的方式將它們合并成一個(gè)新的有序鏈ヽ(′ー`)ノ表,具體步驟如下:首先對兩個(gè)鏈表分別進(jìn)行排序,(′?`*)然后比較它們的頭節點(diǎn),將較小的頭節點(diǎn)添加到結果鏈表中,并更新當前節點(diǎn)為較小頭節(jie)點(diǎn)之后的那個(gè)節點(diǎn),接著(zhù)重復上述過(guò)程,直到其中一個(gè)鏈表為空,最后將另一個(gè)鏈表剩余的部分添加到結果鏈表中,這樣就得到了一個(gè)合并后的有序鏈表。
Copyright ? 2012-2018 天津九安特機電工程有限公司 版權所有 備案號: