本文实例讲述了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++实现单链表按k值重新排序的方法全部内容,希望文章能够帮你解决C++实现单链表按k值重新排序的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)