C++实现单链表按k值重新排序的方法
本文实例讲述了C++实现单链表按k值重新排序的方法。分享给大家供大家参考,具体如下:
题目要求:
给定一链表头节点,节点值类型是整型。
现给一整数k,根据k将链表排序为小于k,等于k,大于k的一个链表。
对某部分内的节点顺序不做要求。
算法思路分析及代码(C)
思路:将链表分为小于k、等于k、大于k的三个链表,然后再合并。
链表结点定义:
typedefstructNode { intdata; structNode*next; }node,*pNode;
算法代码:
pNodesortLinkedList(pNodehead,intk) { pNodesHead=NULL;//小头 pNodesTail=NULL;//小尾 pNodeeHead=NULL;//等头 pNodeeTail=NULL;//等尾 pNodebHead=NULL;//大头 pNodebTail=NULL;//大尾 pNodetemp=NULL; //拆分链表 while(head!=NULL) { temp=head->next; head->next=NULL; if(head->datanext=head; sTail=head; } } elseif(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; } returnsHead!=NULL?sHead:(eHead!=NULL?eHead:bHead); }
希望本文所述对大家C++程序设计有所帮助。