自己写的关于链表的小程序。baodian13_1.cpp
//实现单链表的建立,测长,打印功能
#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;
typedef struct Node
{
int data;
struct Node* next;
}Node,*LinkList;
//单链表的建立
//数据从键盘输入,规定data=0,数据输入停止
LinkList Creat_linklist()
{
int cycle=1;//用于控制循环
LinkList L=(LinkList)malloc(sizeof(Node));//建立的新链表
LinkList temp=L;//指向链表的尾接点
if(NULL==L)
{
cout<<"Failed to malloc a new Linklist!";
return NULL;
}
L->next=NULL;//建立空的头结点
while(cycle)
{
int data;//用于存放键盘中输入的数据
cout<<"Please input the data:"<<endl;
cin>>data;
if(data!=0)
{
LinkList s=(LinkList)malloc(sizeof(Node));
s->data=data;//新建节点赋初值
s->next=NULL;
temp->next=s;//建立链接,更新链表
temp=temp->next;
}
else
{
cycle=0;
}
}
return L;
}
//单链表的测长
int GetLength_Linklist(LinkList L)
{
if(NULL==L)
{
cout<<"There is no node!"<<endl;
}
if (NULL==L->next)
{
cout<<"The linklist is empty!"<<endl;
}
int i=0;
LinkList temp=L->next;
while(NULL!=temp)
{
i++;
temp=temp->next;
}
return i;
}
//单链表的打印
void Print_Linklist(LinkList L)
{
if(NULL==L)
{
cout<<"There is no node!"<<endl;
}
if (NULL==L->next)
{
cout<<"The linklist is empty!"<<endl;
}
LinkList temp;
cout<<"链表的打印"<<endl;
for (temp=L->next;NULL!=temp->next;temp=temp->next)
{
cout<<setw(3)<<temp->data<<"->";
}
cout<<setw(3)<<temp->data;
cout<<endl;
}
int main()
{
LinkList L=Creat_linklist();
Print_Linklist(L);
int i=GetLength_Linklist(L);
cout<<"链表的长度:"<<i<<endl;
return 0;
}
//实现删除节点值为num的节点
//num--要删除的节点值
LinkList Node_Delete(LinkList L,int num)
{
if(NULL==L)
{
cout<<"There is no node!"<<endl;
}
if (NULL==L->next)
{
cout<<"The linklist is empty!"<<endl;
}
LinkList temp=L->next;//用于指向被删除的节点
LinkList p=L;//用于指向被删除节点的上一个节点
while (NULL!=temp->next)//检查前N-1个节点
{
if (num==temp->data)
{
p->next=temp->next;
free(temp);
cout<<"删除节点成功。"<<endl;
return L;
}
else
{
p=temp;
temp=temp->next;
}
}
//检查尾节点
if (num==temp->data&&NULL==temp->next)
{
p->next=NULL;
free(temp);
cout<<"删除节点成功。"<<endl;
return L;
}
else
{
cout<<"没有此节点,无法删除!"<<endl;
}
}