用C++结构实现链表,并对链表进行创建,插入、删除节点等操作。在此程序中,要特别注意链表删除操作时一定要及时清除删除节点所占用的内存,以免发生内存泄露。
#include <iostream>
using namespace std;
struct node
{
int data;
node* next;
};
void push(node** headRef, int data)
{
node* newnode= new node;
newnode->data=data;
newnode->next=*headRef; //实际的表头指针
*headRef=newnode;
}
void insert(node* &head,node* newLink)
{
node* before;
node* current;
before=current=head;
while(head!=NULL)
if(current->data>newLink->data)
break;
else
{
before=current;
current=current->next;
}
if(head==current)
{
current->next=head;
head=current;
}
else
{
before->next=newLink;
newLink->next=current;
}
}
void deleteLink(node** head, int data)
{
node* before,*current,*temp=NULL;
before=current=*head;
while(current!=NULL)
if(current->data!=data)
{
before=current;
current=current->next;
}
else
{
if(current!=0)
{
if(current==*head)
{
temp=current; //temp指针用于记录删除节点
*head=current->next;
before=current->next;
current=current->next;
delete temp; //释放删除节点的内存空间
}
else
{
temp=current;
before->next=current->next;
current=current->next;
delete temp;
}
}
}
}
void printLink(node* head)
{
node* pull=head;
while(pull!=0)
{
cout<<pull->data<< " ";
pull=pull->next;
}
cout<<endl;
}
void main( void)
{
node* head=0;
node* tail;
push(&head,1);
tail=head;
for( int i=2;i<10;i++)
{
push(&(tail->next),i);
tail=tail->next;
}
printLink(head);
node* newnode= new node;
newnode->data=3;
newnode->next=NULL;
insert(head,newnode);
printLink(head);
deleteLink(&head,3);
printLink(head);
}
using namespace std;
struct node
{
int data;
node* next;
};
void push(node** headRef, int data)
{
node* newnode= new node;
newnode->data=data;
newnode->next=*headRef; //实际的表头指针
*headRef=newnode;
}
void insert(node* &head,node* newLink)
{
node* before;
node* current;
before=current=head;
while(head!=NULL)
if(current->data>newLink->data)
break;
else
{
before=current;
current=current->next;
}
if(head==current)
{
current->next=head;
head=current;
}
else
{
before->next=newLink;
newLink->next=current;
}
}
void deleteLink(node** head, int data)
{
node* before,*current,*temp=NULL;
before=current=*head;
while(current!=NULL)
if(current->data!=data)
{
before=current;
current=current->next;
}
else
{
if(current!=0)
{
if(current==*head)
{
temp=current; //temp指针用于记录删除节点
*head=current->next;
before=current->next;
current=current->next;
delete temp; //释放删除节点的内存空间
}
else
{
temp=current;
before->next=current->next;
current=current->next;
delete temp;
}
}
}
}
void printLink(node* head)
{
node* pull=head;
while(pull!=0)
{
cout<<pull->data<< " ";
pull=pull->next;
}
cout<<endl;
}
void main( void)
{
node* head=0;
node* tail;
push(&head,1);
tail=head;
for( int i=2;i<10;i++)
{
push(&(tail->next),i);
tail=tail->next;
}
printLink(head);
node* newnode= new node;
newnode->data=3;
newnode->next=NULL;
insert(head,newnode);
printLink(head);
deleteLink(&head,3);
printLink(head);
}
转载于:https://blog.51cto.com/pauloy/94735