// sortList.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
typedef struct List
{
int data;
List* pNext;
List(int data)
{
this->data=data;
pNext=NULL;
}
List(List* pOther)
{
this->data=pOther->data;
pNext=NULL;
}
List * InsertAfterMe(List* node)
{
List * MyOldNext=this->pNext;
this->pNext=node;
if(node)
node->pNext=MyOldNext;
return node;
}
}List,*PList;
PList InitList()
{
PList pHead=new List(-1);
pHead->pNext=NULL;
return pHead;
}
PList AppendList(PList pHead,List* node)
{
if (!node)return pHead;
PList walker=pHead;
while(walker->pNext)
{
walker=walker->pNext;
}
walker->InsertAfterMe(node);
return pHead;
}
bool InsertNodeAtPos(PList pHead,PList node,int pos)//pos代表pHead后面第pos个节点
{
if (!node || pos<=0)
return false;
PList walker=pHead;
while( (pos!=1)&&(walker->pNext) )
{
walker=walker->pNext;
pos--;
}
if(walker && pos-1==0)
{
walker->InsertAfterMe(node);
return true;
}
else
return false;
}
void TraverseList(PList pHead)
{
//,List* node//if (!node)return pHead;
PList walker=pHead;
while(walker->pNext)
{
walker=walker->pNext;
printf("%d ",walker->data);
}
//walker->InsertAfterMe(node);
//return pHead;
printf("\n");
}
PList InsertNodeOrderly(PList pHead,PList node)
{
PList walker=pHead;
while( walker->pNext && node->data>walker->pNext->data )
{
walker=walker->pNext;
}
walker->InsertAfterMe(node);
return pHead;
}
PList SortList(PList pHead)//有点儿模仿插入排序
{
PList walker=pHead->pNext;
pHead->pNext=NULL;
PList walkerNext;
while(walker)
{
walkerNext=walker->pNext;
InsertNodeOrderly(pHead,walker);
walker=walkerNext;
//printf("%d ",walker->data);
}
return pHead;
//walker->InsertAfterMe(node);
//return pHead;
//printf("\n");
}
PList SortListNew(PList pHead)//有点儿模仿插入排序
{
PList pHeadNew=InitList();
PList walker=pHead;
//PList walkerNew=pHeadNew;
while(walker->pNext)
{
walker=walker->pNext;
InsertNodeOrderly(pHeadNew,new List(walker));
//printf("%d ",walker->data);
}
return pHeadNew;
//walker->InsertAfterMe(node);
//return pHead;
//printf("\n");
}
int main(int argc, char* argv[])
{
PList pHead=InitList();
PList tmp=pHead->InsertAfterMe(new List(1));
tmp=tmp->InsertAfterMe(new List(3));
tmp=tmp->InsertAfterMe(new List(5));
tmp=tmp->InsertAfterMe(new List(2));
tmp=tmp->InsertAfterMe(new List(6));
tmp=tmp->InsertAfterMe(new List(4));
TraverseList(pHead);
PList pHeadNew=SortListNew(pHead);
TraverseList(pHeadNew);
SortList(pHead);
TraverseList(pHead);
printf("============================\n");
InsertNodeAtPos(pHead,new List(7),7);//pos代表pHead后面第pos个节点
TraverseList(pHead);
InsertNodeAtPos(pHead,new List(-1),-1);//pos代表pHead后面第pos个节点
TraverseList(pHead);
InsertNodeAtPos(pHead,new List(0),0);//pos代表pHead后面第pos个节点
TraverseList(pHead);
InsertNodeAtPos(pHead,new List(1),1);//pos代表pHead后面第pos个节点
TraverseList(pHead);
InsertNodeAtPos(pHead,new List(2),2);//pos代表pHead后面第pos个节点
TraverseList(pHead);
InsertNodeAtPos(pHead,new List(100),100);//pos代表pHead后面第pos个节点
TraverseList(pHead);
printf("Hello World!\n");
return 0;
}
/*
1 3 5 2 6 4
1 2 3 4 5 6
1 2 3 4 5 6
============================
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 1 2 3 4 5 6 7
1 2 1 2 3 4 5 6 7
1 2 1 2 3 4 5 6 7
Hello World!
Press any key to continue
*/
InsertNodeAtPos(pHead,new List(7),7);//pos代表pHead后面第pos个节点
最新推荐文章于 2022-04-20 13:08:29 发布