看看我的单链表的删除和插入有问题在哪?
来源:百度知道 编辑: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
插入问题更大,不好描述.
创建和遍历没问题.
帮忙指点下!!
#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