链表操作详解,老师写的我拿来分享给你们
// CPP12.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
struct Node
{
int Data;
Node *Next;
};
Node *Create()
{
Node *H;
H=new Node[1];
H->Next=nullptr;
return H;
}
Node *MoveTo(Node *H,int Pos)
{
Node *p=H;
for(int i=0;i<Pos;i++)
p=p->Next;
return p;
}
void Insert(Node *H,int Pos,int Data)
{
Node *p;
p=new Node[1];
p->Data=Data;
Node *q=MoveTo(H,Pos-1);
p->Next=q->Next;
q->Next=p;
}
void Delete(Node *H,int Pos)
{
Node *q=MoveTo(H,Pos-1);
Node *p=q->Next;
q->Next=q->Next->Next;
delete []p;
}
void Destroy(Node *&H)
{
while(H->Next!=nullptr)
Delete(H,1);
delete []H;
H=nullptr;
}
void Cout(Node *H)
{
/*
for(Node *p=H->Next;p!=nullptr;p=p->Next)
cout<<p->Data<<endl;
*/
Node *p=H->Next;
while(p!=nullptr)
{
cout<<p->Data<<endl;
p=p->Next;
}
}
Node *Search(Node *H,int Data)
{
Node *p=nullptr;
Node *q=H->Next;
while(q!=nullptr)
{
if(q->Data==Data)
{
p=q;
break;
}
q=q->Next;
}
return p;
}
Node *SearchPreNode(Node *H,int Data)
{
Node *p=nullptr;
Node *q=H->Next;
while(q->Next!=nullptr)
{
if(q->Next->Data==Data)
{
p=q;
break;
}
q=q->Next;
}
return p;
}
void DeleteData(Node *H,int Data)
{
Node *p;
do
{
p=SearchPreNode(H,Data);
if(p!=nullptr)
{
Node *q=p->Next;
p->Next=q->Next;
delete []q;
}
}while(p!=nullptr);
}
int _tmain(int argc, _TCHAR* argv[])
{
Node *H=Create();
for(int i=1;i<=10;i++)
Insert(H,1,i*i);
for(int i=1;i<=10;i++)
Insert(H,1,i*i);
// Cout(H);
// cout<<Search(H,25)->Data<<endl;
// cout<<SearchPreNode(H,25)->Data<<endl;
DeleteData(H,25);
Cout(H);
system("PAUSE");
return 0;
}