看看我的单链表的删除和插入有问题在哪?

来源:百度知道 编辑:UC知道 时间:2024/04/28 22:07:35
删除“a[n]”后,链表就剩下a[n-1],a[n+1],...NULL。a[n-1]前面的元素没了?
插入问题更大,不好描述.
创建和遍历没问题.

帮忙指点下!!

#include <iostream>

using namespace std;

struct Node
{
int value;
Node* next;
};

Node* CreateList2(int n) //逆向创建
{
Node* head=NULL;
int i;
for(i=0;i<n;i++)
{
Node* temp=new Node;
temp->value=n-i;
temp->next=head;
head=temp;
}
return head;
}

Node* CreateList3(int n) //正向创建
{
int i;
Node* head=new Node[n];
for(i=0;i<n;i++)
{
head[i].value=i;
head[i].next=head+i+1;
}
head[n-1].next=NULL;
return head;
}

void TraversalList(Node* head) //遍历
{
for(;head!=NULL;head=head->next)
cout<<head->value<<ends;
cout<<endl;
}

Node* DeleteItem(Node* head,int p) //删除
{
if(head->v

由于你用链表头节点指针head进行操作,并且把它返回作为新链表的头节点指针,这肯定是不行的

下面是修改:

#include <iostream>

using namespace std;

struct Node
{
int value;
Node* next;
};

Node* DeleteItem(Node* head,int p) //删除
{
if(head->value==p)
{
Node* temp=head;
head=head->next;
delete temp;
return head;
}
else
{
Node* p=head;

//用临时变量p进行操作,不要把head往后移动
for(;p!=NULL&&p->next!=NULL;p=p->next)
{
if(p->next->value==p)
{
Node* temp=p->next;
p->next=temp->next;
delete temp;
return head;
}

}
return head;
}
}

Node* InsertItem(Node* head,int q) //插入
{
if(head->value>=q) // 等于第一个节点或在左边
{
Node* temp=new Node;
temp->value=q;
temp->next=head;
head=temp;
return head;
}
else
{
Node