#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
typedef struct node NODE;
NODE* creat(){
int x;
NODE *p,*s,*r;
p=(NODE*)malloc(sizeof(NODE));
s=p;
scanf("%d",&x);
p->data=https://bbs.csdn.net/topics/x;
while(x!=-1)
{ scanf("%d",&x);
r=(NODE*)malloc(sizeof(NODE));
r->data=https://bbs.csdn.net/topics/x;
p->next=r;
p=r;
}
p->next=s;
return(s);
}
NODE* shuchu(NODE *L)
{ NODE *p;
p=L;
while(p)
{ printf("%d",p->data);
p=p->next; }
}
NODE *delprev(NODE *p,int b){
NODE *L,*r,*k;
L=p;
while(L->next->data!=b)
{ r=L;
L=L->next;}
k=L->next;
r->next=k;
free(L);
return(k);
}
int main()
{
int a;
NODE *L,*p;
printf("新建鏈表\n輸入值以-1結尾:");
p=creat();
printf("指定結點p的值:");
scanf("%d",&a);
L=delprev(p,a);
shuchu(L);
}

無頭指標的回圈鏈表,洗掉一個特定值所在的結點的前驅。
能正確洗掉,但是變成了死回圈
uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
typedef struct node NODE;
NODE* creat()
{
int x;
NODE *p,*s,*r;
p = (NODE*)malloc(sizeof(NODE));
s = p;
scanf("%d",&x);
p->data = x;
//while(x!=-1)
while(1)
{
scanf("%d", &x);
if (x == -1)
break;
r=(NODE*)malloc(sizeof(NODE));
r->data = x;
p->next = r;
p = r;
}
p->next = s;
return(s);
}
//NODE* shuchu(NODE *L)
void shuchu(NODE *L)
{
NODE *p;
p = L;
//while(p) {
while(p->next != L) {
printf("%d",p->data);
p = p->next;
}
printf("%d",p->data);
}
NODE *delprev(NODE *p,int b){
NODE *L,*r,*k;
L=p;
while(L->next->data!=b)
{ r=L;
L=L->next;}
k=L->next;
r->next=k;
free(L);
return(k);
}
int main()
{
int a;
NODE *L,*p;
printf("新建鏈表\n輸入值以-1結尾:");
p = creat();
shuchu(p);
printf("指定結點p的值:");
scanf("%d",&a);
L = delprev(p,a);
shuchu(L);
}
供參考~
樓主的是回圈鏈表,但是shuchu函式沒有特殊處理,所以是死回圈呢。
其他地方也做了修改,供參考~
uj5u.com熱心網友回復:
啊啊啊啊 感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110151.html
標籤:C語言
上一篇:把有序陣列有序的放入佇列中,其中lnitquene為初始化,enquene為入佇列,求大神幫看為何不行
下一篇:如何只得到一個結果
