1、单链表插入和删除
题目:单链表插入和删除
分析:插入是将值为x的新结点插入到单链表的第i个结点的位置上,删除即将单链表的第i个结点删去。
//单链表插入和删除
#include<iostream>
using namespace std;
typedef struct node
{
int data;
node *next;
}linklist;
linklist *head=NULL;
//创建长度为len的链表
linklist* CreateList(int* arr,int len)
{
int data;
linklist* pCur,* pRear;
head=(linklist*)malloc(sizeof(linklist));
pRear=head;
int count=0;
while(count<len)
{
pCur=(linklist*)malloc(sizeof(linklist));
pCur->data=arr[count];
pRear->next=pCur;
pRear=pCur;
count++;
}
pRear->next=NULL;
return head;
}
//显示链表
void ShowList(linklist* p)
{
while(p)
{
cout<<p->data <<' ';
p=p->next;
}
cout << endl;
}
/************************************************************************/
/* 将值为x的新结点插入到单链表的第i个结点的位置上 */
/************************************************************************/
void InsertList(linklist* p,int x,int i)
{
int j=1;
while(p->next && j<i)
{
p=p->next;
++j;
}
if(p==NULL)
return;
linklist* s=(linklist*)malloc(sizeof(linklist));
s->data=x;
s->next=p->next;
p->next=s;
}
/************************************************************************/
/* 删除单链表的第i个结点 */
/************************************************************************/
void DeleteList(linklist* p,int i)
{
int j=1;
while(p->next && j<i)
{
p=p->next;
++j;
}
if(p==NULL || p->next==NULL || j>i)
return;
linklist* q=p->next;
p->next=q->next;
free(q);
}
int main()
{
int a[]={3,4,5,1,2,-1,7};
CreateList(a,sizeof(a)/sizeof(a[0]));
ShowList(head->next);
InsertList(head,10,4);
ShowList(head->next);
DeleteList(head,5);
ShowList(head->next);
return 0;
}