#include
#include
#define N 5
typedef struct node {
int data;
struct node next;
} NODE;
/*********found**********/
NODE * fun(NODE h)
{ NODE *p, *q, *r;
p = h;
if (p == NULL)
return NULL;
q = p->next;
p->next = NULL;
while (q)
{
/*********found**********/
r = q->next;
q->next = p;
p = q;
/**********found**********/
q = r;
}
return p;
}
NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;
h=NULL;
for(i=0; i
{ _q=(NODE *)malloc(sizeof(NODE));_
q->data=a[i];
q->next = NULL;
if (h == NULL) h = p = q;
else { p->next = q; p = q; }
}
return h;
}
void outlist(NODE *h)
{ NODE *p;
p=h;
if (p==NULL) printf("The list is NULL!\n");
else
{ printf("\nHead ");
do
{ printf("->%d", p->data); p=p->next; }
while(p!=NULL);
printf("->End\n");
}
}
main()
{ NODE *head;
int a[N]={2,4,6,8,10};
head=creatlist(a);
printf("\nThe original list:\n");
outlist(head);
head=fun(head);
printf("\nThe list after inverting :\n");
outlist(head);
}
求教C语言单项链表逆置NODE * fun(NODE *h)函数每步步骤详细解读
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- threenewbee 2015-09-04 12:36关注
#include <stdio.h> #include <stdlib.h> #define N 5 //数组长度 5 typedef struct node { //定义节点 int data; //数据 struct node *next; //下一个节点 } NODE; /**********found**********/ NODE * fun(NODE *h) //插入函数 { NODE *p, *q, *r; p = h; // p指向头节点 if (p == NULL) //如果为空,返回,不处理 return NULL; q = p->next; // q指向p的下一个节点 p->next = NULL;// 的下一个节点为空 while (q) // 循环,直到q为null { /**********found**********/ r = q->next; // 让r指向q的下一个, q->next = p; // q的下一个为p p = q; // p为q /**********found**********/ q = r; //q为r,经过这几步,p被插入到链表里 } return p; } NODE *creatlist(int a[]) //根据数组a创建链表 { NODE *h,*p,*q; int i; h=NULL; for(i=0; i<N; i++) { _q=(NODE *)malloc(sizeof(NODE));_ //分配内存 q->data=a[i]; // 数据复制 q->next = NULL; //下一个节点为空 if (h == NULL) h = p = q; //如果头节点为空,都为空 else { p->next = q; p = q; } // 把q插入 } return h; //返回头节点 } void outlist(NODE *h) //输出链表 { NODE *p; p=h; if (p==NULL) printf("The list is NULL!\n"); //链表为空 else { printf("\nHead "); //输出链表头 do //循环 { printf("->%d", p->data); p=p->next; } //打印链表当前元素,并且指向下一个元素 while(p!=NULL); // 直到链表节点为null printf("->End\n"); //输出结束 } } main() { NODE *head; //定义头节点 int a[N]={2,4,6,8,10}; //数组 head=creatlist(a); //根据数组得到链表 printf("\nThe original list:\n"); //输出原始链表 outlist(head); //输出 head=fun(head); //插入节点 printf("\nThe list after inverting :\n"); outlist(head); //输出插入后的链表 }
解决 无用评论 打赏 举报
悬赏问题
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥200 uniapp长期运行卡死问题解决
- ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
- ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
- ¥15 乘性高斯噪声在深度学习网络中的应用
- ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集