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

这篇博客通过C++实现了单链表的创建、计算链表长度、打印链表、删除指定节点、插入新节点以及对链表进行排序等基本操作。代码中详细展示了每个函数的实现过程,并通过主函数进行了测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值