C++实现单链表按k值重新排序的方法
2017-05-08 11:55
681 查看
本文实例讲述了C++实现单链表按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); }
希望本文所述对大家C++程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- C++常见排序方法实现
- C++实现数组的排序/插入重新排序/以及逆置操作
- C++实现合并排序的方法
- C++循环链表之约瑟夫环的实现方法
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 直接插入排序的C++实现及随机数组的产生方法
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
- C#双向链表LinkedList排序实现方法
- <数据结构>单链表元素按插入方法排序实现
- 原创:C++实现的可排序的双向链表
- 直接选择排序的C++实现及随机数组的产生方法
- 两种方法实现链表的节点操作排序
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- C++实现两个已经排序的链表进行合并
- C++实现模板顺序表和三种排序方法
- C++实现数组的排序/插入重新排序/以及逆置操作
- 合并两个已排序的链表(递归方法实现)
- 链表的c++实现方法
- 剑指offer第十六题【合并两个排序的链表】c++实现
- c++实现八大排序方法(一)