1. 程式人生 > >鏈表的基本操作(小測試)

鏈表的基本操作(小測試)

cout 刪除節點 truct out 位置 malloc while 基本 eof

創建鏈表結構

typedef struct Node
{
int data;
Node *pNext;
}NodeList;

初始化鏈表節點

Node *InitNode(Node*pNode, int data)
{
pNode = (Node*)malloc(sizeof(Node));
if (pNode == NULL)
return NULL;
pNode->data = data;
pNode->pNext = NULL;
return pNode;
}

創建鏈表節點

void CreatNode(Node *pHead,int num)
{
Node *pNewNode = NULL;
int i = 0;
srand((int)time(0));
for (i = 0; i < num; i++)
{
pNewNode = (Node*)malloc(sizeof(Node));
if (pNewNode == NULL)
return ;
pNewNode->data = rand() % 100;
pNewNode->pNext = pHead->pNext;
pHead->pNext = pNewNode;
}
}

遍歷鏈表內容:

void PrintNode(Node *pHead)
{
if (pHead == NULL)
cout << "鏈表為空" << endl;

Node *pTemp = pHead;
while (pTemp)
{
cout << "鏈表的數據內容:" << pTemp->data << endl;
pTemp = pTemp->pNext;
}
}

//鏈表節點追加數據內容

Node *InsertNode(Node *pHead, int index,int data)
{
Node *pTemp = pHead;
Node *pNewNode = NULL;
pNewNode = InitNode(pNewNode, data);
if (pTemp->pNext == NULL) //就一個頭節點
{
pTemp = pNewNode;
return pHead;
}
while (pTemp != NULL)
{
if (pTemp->data == index)
{
pNewNode->pNext = pTemp->pNext; //先把新節點的指針指向當前節點的下一節點
pTemp->pNext = pNewNode; //再把當前節點的的指針指向新節點
//註意:以上兩個順序不能調換 ,調換會出先死循環
break;
}
else
{
pTemp = pTemp->pNext;
}
}

if (pTemp == NULL)
{
cout << "未找到要你輸入的數據節點" << endl;
}
return pHead;
}

//鏈表節點的刪除

Node *DeleteNode(Node *pHead, int data)
{
Node *pTemp = pHead; //用於索引的指針
Node *pRecord = NULL; //用於記錄要刪除節點的上一節點
if (pTemp->data == data) //要刪除的數據在頭節點
{
pHead = pTemp->pNext;
free(pTemp);
pHead = NULL;
}
else
{
while (pTemp != NULL)
{
pRecord = pTemp; //記錄當前節點
pTemp = pTemp->pNext;

if (pTemp == NULL) //遍歷完也沒找要刪除的節點
{
cout << "遍歷完也沒找到要刪除的數據!" << endl;
return pHead;
}
else if(pTemp->data == data) //找到要刪除的數據
{
pRecord->pNext = pTemp->pNext; //刪除前把要刪除的節點的前一節點的指針指向要刪除節點的下一節點
free(pTemp);
break;
}
}
}
return pHead;
}

//main函數調用

int main()
{
Node *pHead = NULL;
pHead = InitNode(pHead, -1);
if (pHead == NULL)
return - 1;

CreatNode(pHead, 10);//創建10個節點 保存隨機數據
PrintNode(pHead); //打印節點

//刪除節點
int n = 0;
while (n>= 0)
{
//cout << "輸入要刪除的數據:";
cout << "指定插入數據的位置:";
cin >> n;
//pHead = DeleteNode(pHead, n); //已經測試
pHead = InsertNode(pHead, n, 1000);
PrintNode(pHead);
}
return 0;
}

鏈表的基本操作(小測試)