知識儲備:03連結串列:連結串列之啞節點的使用
阿新 • • 發佈:2019-02-04
要對頭結點進行操作時,考慮建立啞節點dummy,使用dummy->next表示真正的頭節點。這樣可以避免處理頭節點為空的邊界問題。
1.給定一個連結串列和x,對連結串列排序使所有小於x的節點出現在大於或等於x的節點的前面。
程式碼如下:
#include <iostream>
using namespace std;
/* 連結串列之啞節點的使用 2-17-8-22 */ struct ListNode{ int value; ListNode *next; ListNode(int x){ value = x; } }; //排序:小與x都在大於或等於x的前面 ListNode *reorderXList(ListNode *head, int x) { ListNode *newhead = NULL; ListNode *aDummy = new ListNode(0); ListNode *aCurr = aDummy; ListNode *bDummy = new ListNode(0); ListNode *bCurr = bDummy; while (head) { ListNode *next = head->next; head->next = NULL; if (head->value < x) { aCurr->next = head; aCurr = head;//後移 } else { bCurr->next = head; bCurr = head; } head = next; } aCurr->next = bDummy->next;//連線起來 newhead = aDummy->next;//新的頭節點 delete aDummy; delete bDummy; return newhead; } int main() { ListNode *a1, *a2, *a3, *a4; ListNode *head; head = (ListNode*)malloc(sizeof(ListNode)); a1 = (ListNode*)malloc(sizeof(ListNode)); a2 = (ListNode*)malloc(sizeof(ListNode)); a3 = (ListNode*)malloc(sizeof(ListNode)); a4 = (ListNode*)malloc(sizeof(ListNode)); head->next = a1; a1->value = 5; a1->next = a2; a2->value = 8; a2->next = a3; a3->value = 3; a3->next = a4; a4->value = 6; a4->next = NULL; ListNode *resHead; resHead = reorderXList(head, 6); return 0; }