1,链表的基本结构
typedef struct LinkList{
int elem;
LinkList *next;
LinkList():elem(0),next(NULL){}
} LinkList;
2,链表的初始化
LinkList* init_list()
{
LinkList *HeadNode = new LinkList();
return HeadNode;
}
3,新建链表
void CreateLinkList(LinkList *HeadNode,int *data, int dataNum)
{
LinkList *CurrentNode = HeadNode;
int i = 0;
while(i < dataNum)
{
CurrentNode->elem = data[i++];
if(i <dataNum-1)
{
CurrentNode->next = new LinkList();
CurrentNode = CurrentNode->next;
}
}
HeadNode->next =NULL;
}
4,在指定位置插入元素
void inSertLinkList(LinkList* HeadNode, int data, int locationIndex)
{
LinkList *CurrentNode = HeadNode;
int i = 0;
while(i < locationIndex && CurrentNode)
{
CurrentNode = CurrentNode->next;
i++;
}
LinkList *NodeToInsert = new LinkList();
NodeToInsert->next = CurrentNode->next;
CurrentNode->next = NodeToInsert;
NodeToInsert->elem = data;
}
5,在指定位置删除元素
void deleteLinkList(LinkList* HeadNode, int data, int locationIndex)
{
LinkList *CurrentNode = HeadNode;
LinkList *NodeToDelete;
int i = 0;
while(i < locationIndex && CurrentNode)
{
CurrentNode = CurrentNode->next;
i++;
}
NodeToDelete = CurrentNode;
CurrentNode->next =CurrentNode->next->next;
delete NodeToDelete;
}
6,查询链表的长度
size_t getListLength(LinkList* HeadNode)
{
size_t listLength = 0;
LinkList *CurrentNode = HeadNode;
while(CurrentNode)
{
CurrentNode = CurrentNode->next;
listLength ++;
}
return listLength;
}
7,删除整个链表
void DestroyLinkList(LinkList* HeadNode)
{
LinkList *pNext;
LinkList *CurrentNode = HeadNode;
while(CurrentNode)
{
pNext = CurrentNode->next;
delete CurrentNode;
CurrentNode = pNext;
}
HeadNode->next = NULL;
}
8,链表的翻转
LinkList reverseLinkList(LinkList * HeadNode)
{
LinkList *preV = new LinkList();
preV->next = HeadNode;
LinkList *CurrentNode = HeadNode;
while(CurrentNode->next)
{
LinkList *pNext = CurrentNode -> next;
CurrentNode->next = pNext->next;
pNext->next = CurrentNode;
preV->next = pNext;
}
return preV->next;
}
9,判断链表是否成环
bool IsListLoop(LinkList* HeadNode)
{
LinkList *pFast = HeadNode;
LinkList *pSlow = HeadNode;
while(pFast && pSlow)
{
pSlow = pSlow->next;
if(pFast->next)
{
pFast = pFast->next->next;
}
else{
pFast = pFast->next;
}
if(pFast == pSlow)
{
return true;
}
}
return false;
}
int main()
{
return 0;
}