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