main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#define TRUE (0)
#define FALSE (0)
typedef int ElemType;
typedef char BOOL;
typedef struct LNode{
LNode *next;
ElemType data;
}LinkNode;
class CList
{
private:
LinkNode *m_pRoot;
public:
CList();
~CList();
BOOL AddNode(const ElemType &rstData);
void TravelAll();
void Destroy();
void Reverse();
};
CList::CList()
{
m_pRoot = NULL;
}
CList::~CList()
{
Destroy();
}
void CList::TravelAll()
{
if(m_pRoot == NULL)
{
printf("list is empty!\n");
}
LinkNode* pHead = m_pRoot;
while(pHead)
{
printf("%d ", pHead->data);
pHead = pHead->next;
}
printf("\n");
}
void CList::Destroy()
{
while(m_pRoot)
{
LinkNode* pTmp = m_pRoot;
m_pRoot = m_pRoot->next;
if(pTmp)
{
free(pTmp);
pTmp = NULL;
}
}
}
BOOL CList::AddNode(const ElemType &rstData)
{
if(m_pRoot == NULL)
{
m_pRoot = (LinkNode*)malloc(sizeof(LinkNode));
if(m_pRoot == NULL)
{
printf("malloc failed!, errno=%d, errmsg=%s\n", errno, strerror(errno));
return FALSE;
}
m_pRoot->data = rstData;
m_pRoot->next = NULL;
return TRUE;
}
LinkNode* pHead = m_pRoot;
while(pHead->next) pHead = pHead->next;
LinkNode *pNewNode = (LinkNode*)malloc(sizeof(LinkNode));
if(pNewNode == NULL)
{
printf("malloc failed, errno=%d, errmsg=%s\n", errno, strerror(errno));
return FALSE;
}
pNewNode->next = NULL;
pNewNode->data = rstData;
pHead->next = pNewNode;
return TRUE;
}
// 单链表反转
void CList::Reverse()
{
// 1->2->3->4->5
// 2->1->3->4->5
// 3->2->1->4->5
// 4->3->2->1->5
// 5->4->3->2->1
if(m_pRoot == NULL || m_pRoot->next == NULL)
{
return;
}
LinkNode* pCurPos = m_pRoot->next;
LinkNode* pHead = m_pRoot;
LinkNode* pPrev = pHead;
while(pCurPos)
{
LinkNode* pNextPos = pCurPos->next;
pPrev->next = pCurPos->next;
pCurPos->next = pHead;
pHead = pCurPos;
pCurPos = pNextPos;
//TravelAll();
}
m_pRoot = pHead;
}
int main(int argc, char *argv[])
{
srand(time(0));
CList list;
for(int i=0;i<10;i++)
{
int tmp = rand()%256;
list.AddNode(i+1);
}
list.TravelAll();
list.Reverse();
list.TravelAll();
return 0;
}
Makefile
CC=g++
SRC=$(wildcard *.cpp)
OBJS=${SRC:%.cpp=%.o}
EXE=linklist
all:
@echo "src:${SRC}, objs:${OBJS}"
${CC} -c ${SRC}
${CC} -o ${EXE} ${OBJS}
clean:
rm -f ${OBJS} ${EXE}