c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
2016-10-07 16:49
761 查看
在牛客网上刷题的过程遇到很多链表的问题,所以自己又结合着传智播客上的视频把链表整理了一下
。
#include <iostream>
using namespace std;
//链表的的结点
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
//创建一个单向链表
ListNode* list_Create()
{
ListNode* pHead,*pCurrent,*pNew;
int data; // 不断输入的数据
pHead = new ListNode(0);
pCurrent = pHead;
cin>>data;
while(data != -1)
{
pNew = new ListNode(data); //1.创建新节点
pCurrent->next = pNew ; //2.插入新节点
pCurrent = pNew ; //3.让新节点变成当前节点
cin>>data;
}
return pHead->next; //因为上面代码中的头文件不是输入数据,只是为了方便操作
}
//打印单向链表
void list_Print(ListNode* pHead)
{
ListNode* tem ;
if(pHead == NULL)
return ;
tem = pHead ; //养成好习惯:对传入的数据用另外一个临时变量接住
while(tem)
{
cout<<tem->val<<" ";
tem = tem->next;
}
cout<<endl;
}
//插入单向链表
ListNode *list_Insert(ListNode* pHead,int x,int y)//在链表中值为x的结点后面插入y值的新节点
{
if(pHead == NULL)
return NULL;
ListNode *pCurrent,*pNew;
pCurrent = pHead ;
pNew = new ListNode(y);
while(pCurrent)
{
if(pCurrent->val == x)
break;
pCurrent = pCurrent->next;
}
pNew->next = pCurrent->next ;//在单向链表中,一定要注意当前节点的位置存放在前面结点的next域中
pCurrent->next = pNew ; //所以赋值的过程中是从后面的结点向前面的结点赋值的,而且指针指向谁,就赋给谁
return pHead ;
}
//删除单向链表中的值为data的结点
ListNode* listDelete(ListNode* pHead,int data)
{
if(pHead == NULL)
return NULL;
ListNode* pPre,*pCurrent ;
pPre = pHead ;
pCurrent = pPre->next ;
//pNew = new ListNode(data);
while(pCurrent)
{
if(pCurrent->val == data )
break;
pPre = pCurrent;
pCurrent = pCurrent->next;
}
if(pCurrent == NULL)
cout<<"未能找到值为:"<<data<<"的结点"<<endl;
else
{
pPre->next = pCurrent->next ;
delete pCurrent;
}
return pHead;
}
//单向链表的销毁
int listDestory(ListNode* pHead)
{
if(pHead == NULL)
return 0;
ListNode *tem = NULL;
while(pHead)
{
tem = pHead->next;
delete pHead;
pHead = tem;
}
return 0;
}
int main()
{
//新建链表测试
ListNode* node = list_Create();
//打印链表测试
list_Print(node);
//插入链表测试
//ListNode* node5 = list_Insert(node ,10,999);
//list_Print(node5);
//删除链表测试
//ListNode* node6 = listDelete(node,20);
//list_Print(node6);
//销毁链表测试
int node7 = listDestory(node);
return 0;
}
。
#include <iostream>
using namespace std;
//链表的的结点
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
//创建一个单向链表
ListNode* list_Create()
{
ListNode* pHead,*pCurrent,*pNew;
int data; // 不断输入的数据
pHead = new ListNode(0);
pCurrent = pHead;
cin>>data;
while(data != -1)
{
pNew = new ListNode(data); //1.创建新节点
pCurrent->next = pNew ; //2.插入新节点
pCurrent = pNew ; //3.让新节点变成当前节点
cin>>data;
}
return pHead->next; //因为上面代码中的头文件不是输入数据,只是为了方便操作
}
//打印单向链表
void list_Print(ListNode* pHead)
{
ListNode* tem ;
if(pHead == NULL)
return ;
tem = pHead ; //养成好习惯:对传入的数据用另外一个临时变量接住
while(tem)
{
cout<<tem->val<<" ";
tem = tem->next;
}
cout<<endl;
}
//插入单向链表
ListNode *list_Insert(ListNode* pHead,int x,int y)//在链表中值为x的结点后面插入y值的新节点
{
if(pHead == NULL)
return NULL;
ListNode *pCurrent,*pNew;
pCurrent = pHead ;
pNew = new ListNode(y);
while(pCurrent)
{
if(pCurrent->val == x)
break;
pCurrent = pCurrent->next;
}
pNew->next = pCurrent->next ;//在单向链表中,一定要注意当前节点的位置存放在前面结点的next域中
pCurrent->next = pNew ; //所以赋值的过程中是从后面的结点向前面的结点赋值的,而且指针指向谁,就赋给谁
return pHead ;
}
//删除单向链表中的值为data的结点
ListNode* listDelete(ListNode* pHead,int data)
{
if(pHead == NULL)
return NULL;
ListNode* pPre,*pCurrent ;
pPre = pHead ;
pCurrent = pPre->next ;
//pNew = new ListNode(data);
while(pCurrent)
{
if(pCurrent->val == data )
break;
pPre = pCurrent;
pCurrent = pCurrent->next;
}
if(pCurrent == NULL)
cout<<"未能找到值为:"<<data<<"的结点"<<endl;
else
{
pPre->next = pCurrent->next ;
delete pCurrent;
}
return pHead;
}
//单向链表的销毁
int listDestory(ListNode* pHead)
{
if(pHead == NULL)
return 0;
ListNode *tem = NULL;
while(pHead)
{
tem = pHead->next;
delete pHead;
pHead = tem;
}
return 0;
}
int main()
{
//新建链表测试
ListNode* node = list_Create();
//打印链表测试
list_Print(node);
//插入链表测试
//ListNode* node5 = list_Insert(node ,10,999);
//list_Print(node5);
//删除链表测试
//ListNode* node6 = listDelete(node,20);
//list_Print(node6);
//销毁链表测试
int node7 = listDestory(node);
return 0;
}
相关文章推荐
- (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
- 单向链表的操作:创建,删除,插入,销毁,查找
- 链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)
- java语言编写链表的基本操作(链表的创建,插入,删除,打印,排序)
- 单向链表的基本操作-创建、插入、删除
- 链表(1)基本操作:创建,插入,删除,销毁等(模板类实现)
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- c语言链表基本操作(带有创建链表 删除 打印 插入)
- 树的基本结构,以及利用链表实现树的各项操作(创建、添加/删除/打印树节点、销毁等等)
- C-链表的一些基本操作【创建-删除-打印-插入】
- C语言各种链表操作(创建、打印、删除、插入、反转)
- 带头结点单链表的基本操作(创建、测长、打印、插入、删除、取值、合并、排序、逆置)
- 链表的基本操作,创建、删除、插入、反转
- C++单链表的操作(创建,删除,打印,遍历,插入)
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- 单链表结点读取、插入、删除操作(基本操作)-C++
- 链表操作--创建--删除--插入--打印
- 单向链表的相关操作(创建,遍历,插入,删除,逆置)
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现