編程演算法 - 有序雙迴圈鏈表的插入 代碼(C)

來源:互聯網
上載者:User

標籤:mystra   編程演算法   有序雙迴圈鏈表的插入   代碼   c++   

有序雙迴圈鏈表的插入 代碼(C)


本文地址: http://blog.csdn.net/caroline_wendy


有序雙迴圈鏈表的插入, 需要找到插入位置, 可以採用, 兩個指標, 一個在前, 一個在後.

保證前面的小於等於插入值, 後面的大於等於插入值.


特殊情況, 首尾插入(大於或小於整個鏈表)或單節點, 判斷條件為後指標指向首節點. 則需要直接插入.

插入鏈表頭, 需要調整鏈表前端節點.


代碼22行.


代碼:

/* * main.cpp * *  Created on: 2014.9.18 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <stdio.h>#include <stdlib.h>using namespace std;struct ListNode {ListNode (int v) {value = v;prev = NULL;next = NULL;}int value;ListNode* prev;ListNode* next;};ListNode* CreateLists() {ListNode* head = new ListNode(0);ListNode* node1 = new ListNode(1);ListNode* node2 = new ListNode(2);ListNode* node4 = new ListNode(4);ListNode* node5 = new ListNode(5);head->prev = node5;head->next = node1;node1->prev = head;node1->next = node2;node2->prev = node1;node2->next = node4;node4->prev = node2;node4->next = node5;node5->prev = node4;node5->next = head;return head;}ListNode* CreateLists2() {ListNode* head = new ListNode(0);head->prev = head;head->next = head;return head;}void Print(ListNode* head) {ListNode* node = head;printf("%d ", node->value);node = node->next;while (node != head) {printf("%d ", node->value);node = node->next;}printf("\n");}ListNode* InsertNode(ListNode* head, ListNode* node) {if (head == NULL || node == NULL)return NULL;ListNode* prevNode = head;ListNode* nextNode = head->next;while(1) {prevNode = prevNode->next;nextNode = prevNode->next;if ((prevNode->value < node->value && nextNode->value >= node->value)|| (nextNode == head)){prevNode->next = node;node->prev = prevNode;nextNode->prev = node;node->next = nextNode;if (node->value < head->value) {head = node;}break;}}return head;}int main (void){ListNode* head = CreateLists();Print(head);ListNode* node = new ListNode(3);ListNode* newList = InsertNode(head, node);Print(newList);return 0;}

輸出:

0 1 2 4 5 0 1 2 3 4 5 





編程演算法 - 有序雙迴圈鏈表的插入 代碼(C)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.