您的位置:首页 > 编程语言

编程实现单链表的创建等基本操作

2016-09-04 09:53 447 查看
</pre><pre name="code" class="cpp">// 单链表建立测长和打印.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

struct ListNode{
int value;
ListNode* next;
}node;
ListNode* create(int* data,int length)
{
if (data == NULL || length <= 0)
return NULL;
ListNode* pHead = NULL;
ListNode* pPre = NULL;
for (int i = 0; i < length; i++)
{
ListNode* pNode = new ListNode();
pNode->value = data[i];
pNode->next = NULL;
if (pHead == NULL)
pHead = pNode;
else
pPre->next = pNode;
pPre = pNode;
}
return pHead;
}

int length(ListNode* pHead)
{
ListNode* pNode = pHead;
if (pHead == NULL)
return 0;
int len = 0;
while (pNode != NULL)
{
++len;
pNode = pNode->next;
}
return len;
}

void print(ListNode* pHead)
{
ListNode* pNode = pHead;
while (pNode != NULL){
cout << pNode->value;
pNode = pNode->next;
}
cout << endl;
}
//单链表的删除
ListNode* del(ListNode* pHead, int num)
{
ListNode* pNode = pHead;
ListNode* pTemp = NULL;
while (num != pNode->value && pNode->next != NULL)
{
pTemp = pNode;
pNode = pNode->next;
}
if (pNode->value == num)
{
if (pNode == pHead)
{
pHead = pNode->next;
free(pNode);
}
else
{
pTemp->next = pNode->next;
free(pNode);
}
}
return pHead;
}

//单链表的插入
ListNode* Insert(ListNode* pHead, int num)
{
ListNode* pNode = pHead;
ListNode* pTemp = NULL;
ListNode* pNew = (ListNode*)malloc(sizeof(ListNode));
pNew->value = num;
while (pNew->value > pNode->value && pNode->next != NULL)
{
pTemp = pNode;
pNode = pNode->next;
}
if (pNew->value <= pNode->value)
{
if (pHead == pNode)
{
pNew->next = pNode;
pHead = pNew;
}
else
{
pTemp->next = pNew;
pNew->next = pNode;
}
}
else
{
pNode->next = pNew;
pNew->next = NULL;
}
return pHead;
}

//单链表的排序
ListNode* sort(ListNode* pHead)
{
int temp = 0;
int len = length(pHead);
if (pHead == NULL || pHead->next == NULL)
return pHead;
ListNode* pNode = pHead;
for (int i = 1; i < len; i++)
{
pNode = pHead;
for (int j = 0; j < len - i; j++)
{
if (pNode->value > pNode->next->value)
{
temp = pNode->value;
pNode->value = pNode->next->value;
pNode->next->value = temp;
}
pNode = pNode->next;
}
}
return pHead;
}

int _tmain(int argc, _TCHAR* argv[])
{
int data[] = { 1, 2, 3, 4, 5 };
ListNode* pHead = create(data, 5);
print(pHead);
cout << "链表的长度为:" << length(pHead) << endl;
ListNode* pNewHead = del(pHead,3);
print(pHead);
ListNode* pNewHead1 = Insert(pHead, 3);
print(pHead);
ListNode* pNewHead2 = sort(pHead);
print(pHead);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 数据结构
相关文章推荐