單鏈表的建立,列印,釋放,刪除指定節點
阿新 • • 發佈:2020-12-28
*單鏈表的建立,列印,釋放,刪除指定節點
直接看程式碼
(菜鳥創作,技術太菜,不喜勿噴,謝謝)
struct cell { //單鏈表結點結構體定義
int x;
struct cell* next;
};
建立單鏈表
struct cell* build(void) { //新建單鏈表,並將建好的單鏈表首結點地址返回
struct cell* head,*tmp,*p;
head = tmp = p = NULL;
int n;
scanf("%d",&n);
if(n==0)//輸入的資料以0結束
return head;
else{
p=(struct cell*)malloc(sizeof(struct cell));
head=p;
p->x=n;
p->next=NULL;
tmp=p;
scanf("%d",&n);
while(n!=0){
p=(struct cell*)malloc(sizeof(struct cell));
p->next=NULL;
p->x=n;
tmp-> next=p;
tmp=p;
scanf("%d",&n);
}
}
return head;
//返回單鏈表頭
}
列印單鏈表
void print(struct cell* head) {//列印整個單鏈表,head是指向單鏈表首結點的指標
struct cell * ph=head;
if(ph==NULL){
printf("NULL");
return; }
else{
printf("%d" ,ph->x);
ph=ph->next;
while(ph!=NULL){
printf("%d",ph->x);//自己選擇是否加空格
ph=ph->next;
}
}
}
**
釋放空間
**
```void print(struct cell* head) {//列印整個單鏈表,head是指向單鏈表首結點的指標
struct cell * ph=head;
if(ph==NULL){
printf("NULL");
return; }
else{
printf("%d",ph->x);
ph=ph->next;
while(ph!=NULL){
printf("%d",ph->x);//自己選擇是否加空格
ph=ph->next;
}
}
}
刪除連結串列中指定節點
void del(struct cell**head,int m){
struct cell *p=*head,*p1=*head;
if(head==NULL)
return ;
while(p!=NULL){
if(p->x==m){
if(p==*head){
*head=p->next;
}
struct cell* t=p;
p1->next=p->next;
p=p->next;
free(t);
}
else{
p1=p;
p=p->next;
}
}
}
來看看題目
完整程式碼
#include <stdio.h>
#include <malloc.h>
struct cell { //單鏈表結點結構體定義
int x;
struct cell* next;
};
struct cell* build(void) { //新建單鏈表,並將建好的單鏈表首結點地址返回
struct cell* head,*tmp,*p;
head = tmp = p = NULL;
int n;
scanf("%d",&n);
if(n==0)
return head;
else{
p=(struct cell*)malloc(sizeof(struct cell));
head=p;
p->x=n;
p->next=NULL;
tmp=p;
scanf("%d",&n);
while(n!=0){
p=(struct cell*)malloc(sizeof(struct cell));
p->next=NULL;
p->x=n;
tmp->next=p;
tmp=p;
scanf("%d",&n);
}
}
return head;
//返回單鏈表頭
}
void print(struct cell* head) {//列印整個單鏈表,head是指向單鏈表首結點的指標
struct cell * ph=head;
if(ph==NULL){
printf("NULL");
return; }
else{
printf("%d",ph->x);
ph=ph->next;
while(ph!=NULL){
printf("%d",ph->x);//自己選擇是否加空格
ph=ph->next;
}
}
}
void release(struct cell* head) {//釋放單鏈表空間,head是指向單鏈表首結點的指標
struct cell*p1;
while(head!=NULL){
p1=head;
head=p1->next;
free(p1);
}
}
void del(struct cell**head,int m){
struct cell *p=*head,*p1=*head;
if(head==NULL)
return ;
while(p!=NULL){
if(p->x==m){
if(p==*head){
*head=p->next;
}
struct cell* t=p;
p1->next=p->next;
p=p->next;
free(t);
}
else{
p1=p;
p=p->next;
}
}
}
int main(void) {
struct cell* phead;
int key;
phead = build();//建立連結串列
scanf("%d",&key);
del(&phead,key);//刪除元素
if(phead!=NULL)
print(phead);
else
printf("NULL");
release(phead);
}
歡迎提出改進建議!謝謝!