单链表按k值重新排序
2016-05-20 22:43
288 查看
单链表按k值重新排序
题目要求:给定一链表头节点,节点值类型是整型。
现给一整数k,根据k将链表排序为小于k,等于k,大于k的一个链表。
对某部分内的节点顺序不做要求。
算法思路分析及代码(C)
思路:将链表分为小于k、等于k、大于k的三个链表,然后再合并。链表结点定义:
typedef struct Node { int data; struct Node* next; }node, *pNode;
算法代码:
pNode sortLinkedList(pNode head, int k) { pNode sHead = NULL;//小头 pNode sTail = NULL;//小尾 pNode eHead = NULL;//等头 pNode eTail = NULL;//等尾 pNode bHead = NULL;//大头 pNode bTail = NULL;//大尾 pNode temp = NULL; //拆分链表 while (head != NULL) { temp = head->next; head->next = NULL; if (head->data < k) { if (!sHead){ sHead = head; sTail = head; } else{ sTail->next = head; sTail = head; } } else if (head->data == k) { if (!eHead){ eHead = head; eTail = head; } else{ eTail->next = head; eTail = head; } } else { if (!bHead){ bHead = head; bTail = head; } else{ bTail->next = head; bTail = head; } } head = temp; } //合并链表 if (sTail) { sTail->next = eHead; eTail = (eTail == NULL ? sTail : eTail); } if (eTail) { eTail->next = bHead; } return sHead != NULL ? sHead : (eHead != NULL ? eHead : bHead); }
相关文章推荐
- HTTP代理的那些事儿
- sgi stl linux下编译运行
- 优化win2d实现的萤火虫粒子效果
- c++第6次作业
- MD语法
- 找硬币问题
- CSS 行内样式 页内样式 外部样式
- ARM指令集和单纯的RISC的区别
- Linux内核移植
- 使用 stylelint找出你的CSS样式表里的错误和问题
- Java数据类型转换(自动转换和强制转换)
- 【Arduino官方教程第零辑】基础部分-目录
- shell script中创建函数
- shell学习-循环
- android:ListView下拉刷新上拉加载(SwipeRefreshLayout+滑动监听加载更多)
- hadoop 安装
- css的一些选择器以及优先级的比较
- C++第六次实验-矩阵求和
- 进程的阻塞和挂起的区别
- MapReduce YARN Memory Parameters