博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程算法 - 有序双循环链表的插入 代码(C)
阅读量:6155 次
发布时间:2019-06-21

本文共 1922 字,大约阅读时间需要 6 分钟。

有序双循环链表的插入 代码(C)

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

有序双循环链表的插入, 须要找到插入位置, 能够採用, 两个指针, 一个在前, 一个在后.

保证前面的小于等于插入值, 后面的大于等于插入值.

特殊情况, 首尾插入(大于或小于整个链表)或单节点, 推断条件为后指针指向首节点. 则须要直接插入.

插入链表头, 须要调整链表头节点.

代码22行.

代码:

/* * main.cpp * *  Created on: 2014.9.18 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include 
#include
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 head; ListNode* prevNode = head; ListNode* nextNode = head->next; while(1) { 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; } prevNode = prevNode->next; nextNode = prevNode->next; } 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

你可能感兴趣的文章
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>