定義節點
node
typedef struct Node { int data; struct Node *head; struct Node *next; } DoubleLinkNode;
建立雙向鏈表
ui
//建立節點 DoubleLinkNode *rootNode = alloca(sizeof(DoubleLinkNode)); rootNode->data = 10; rootNode->head = NULL; rootNode->next = NULL; DoubleLinkNode *node1 = alloca(sizeof(DoubleLinkNode)); node1->data = 20; node1->head = NULL; node1->next = NULL; DoubleLinkNode *node2 = alloca(sizeof(DoubleLinkNode)); node2->data = 30; node2->head = NULL; node2->next = NULL; DoubleLinkNode *node3 = alloca(sizeof(DoubleLinkNode)); node3->data = 40; node3->head = NULL; node3->next = NULL; //鏈接節點 rootNode->next = node1; node1->head = rootNode; node1->next = node2; node2->head = node1; node2->next = node3; node3->head = node2; // 反轉 DoubleLinkNode *node = reverseDoublelink(rootNode);
反轉雙向鏈表
spa
DoubleLinkNode* reverseDoublelink (DoubleLinkNode *node) { if (node == NULL) {return NULL;} DoubleLinkNode *pre = NULL; while (node) { // 記錄下一個節點 DoubleLinkNode *nextTemp = node->next; // 反轉 node->head = nextTemp; node->next = pre; // 把前節點置爲當前節點 pre = node; // 把當前節點置爲下個節點 node = nextTemp; } return pre; }
雙向循環鏈表節點
code
typedef struct Node { int data; struct Node *head; struct Node *next; } DoubleCirculationLinkNode;
雙向循環鏈表建立
圖片
//建立節點 DoubleCirculationLinkNode *rootNode = alloca(sizeof(DoubleCirculationLinkNode)); rootNode->data = 10; rootNode->head = NULL; rootNode->next = NULL; DoubleCirculationLinkNode *node1 = alloca(sizeof(DoubleCirculationLinkNode)); node1->data = 20; node1->head = NULL; node1->next = NULL; DoubleCirculationLinkNode *node2 = alloca(sizeof(DoubleCirculationLinkNode)); node2->data = 30; node2->head = NULL; node2->next = NULL; DoubleCirculationLinkNode *node3 = alloca(sizeof(DoubleCirculationLinkNode)); node3->data = 40; node3->head = NULL; node3->next = NULL; //鏈接節點 rootNode->head = node3; rootNode->next = node1; node1->head = rootNode; node1->next = node2; node2->head = node1; node2->next = node3; node3->head = node2; node3->next = rootNode;