谁方便帮我看一下程序吗?卡住了,问题是:删除单链表(带头结点,头插入法建立单链表)的第i个结点
#include
#include
#include
using namespace std;
typedef struct Node
{
int data;
struct Node*next;
}Node,*LinkList;
void Initlist(LinkList &L)
{
L=(Node*)malloc(sizeof(Node));
L->next=NULL;
}
void Creatlist(LinkList &L,int a[100],int n)
{
L= (Node *)malloc(sizeof(Node));
L->next = NULL;
LinkList p;
for (int i = 0; i < n; i++) {
p = (LinkList )malloc(sizeof(LinkList));
p->data = a[i];
p->next = L->next;
L->next=p;
}
}
int deleteList (LinkList &L,int m)
{
if(m<1)
{
printf("error\n");
return 0;
}
int i=0;
LinkList q,p;
while(q!=NULL&&inext;
}
p=q->next;
q->next=p->next;
free(p);
return 1;
}
void OutputList(LinkList &L)
{
LinkList s;
s=L->next;
while(s)
{
cout<data<<' ';
s=s->next;
}
int main()
{
int n,m,a[100];
cin>>n;
LinkList L;
Initlist(L);
Creatlist(L,a,n);
cin>>m;
if(deleteList(L,m))
OutputList(L);
if(L->next==NULL)
cout<<"null";
return 0;
}
整体错误修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node* next;
}Node, * LinkList;
void Initlist(LinkList& L)
{
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
}
void Creatlist(LinkList& L, int a[100], int n)
{
//L = (Node*)malloc(sizeof(Node)); L已经初始化过了,这里就多余了。
//L->next = NULL; 修改 这两句多余了。
LinkList p;
for (int i = 0; i < n; i++) {
p = (LinkList)malloc(sizeof(Node)); // 修改
//(LinkList)malloc(sizeof(LinkList));
p->data = a[i];
p->next = L->next;
L->next = p;
}
}
int deleteList(LinkList& L, int m)
{
if (m < 1)
{
printf("error\n");
return 0;
}
int i = 0;
LinkList q = L, p = NULL; // 修改
while (q->next != NULL && i < m - 1) //(q != NULL && i < m) 修改
{
i++;
q = q->next;
}
if (!q->next) { // 修改
printf("error\n"); // 修改
return 0; // 修改
}
p = q->next;
q->next = p->next;
free(p);
return 1;
}
void OutputList(LinkList& L)
{
LinkList s = NULL;
if (L->next == NULL) //修改
cout << "null";
else { //修改
s = L->next;
while (s)
{
cout << s->data << ' ';
s = s->next;
}
printf("\n");
}
}
int main()
{
int n, m, a[20] = { 1,3,5,7,8,9,10,15,14,22,47,25,41,45,66,44,99,102,111,200 }; //修改
cin >> n;
LinkList L;
Initlist(L);
Creatlist(L, a, n);
OutputList(L); //修改
cin >> m;
deleteList(L, m); //if (deleteList(L, m)) //修改
OutputList(L);
//if (L->next == NULL) //修改
//cout << "null"; //修改
return 0;
}
int deleteList (LinkList &L,int m)
{
if(m<1)
{
printf("error\n");
return 0;
}
int i=0;
LinkList q=L->next,p=L;
while(q!=NULL&&i<m)
{
i++;
p = q;
q=q->next;
}
if(q==NULL)
return 0;
p->next = q->next;
free(q);
return 1;
头插法,尾插法:核心就是初始化操作,指定结点的后插操作