C语言单向链表那边,求大神解释一下那个fun函数为什么是那样的,解释一下运行过程

#include <stdio.h>
#include <stdlib.h>
#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;
/**********found**********/
while (q)
{ 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<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; }
}
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);
}

fun()函数的功能是将单链表的结点反序输出。其基本思想是:
NODE *fun(NODE *h)//接收主函数中传递的实参:单链表的头指针
{ NODE *p, *q, *r;//定义三个指向结构体的指针,即指向结点的指针,此处尚未初始化
p = h;//结构体指针p指向链表头结点
if (p == NULL)//如果p为空即链表不存在则,返回为空链表
return NULL;
q = p->next;//初始化q指针,使其指向p指针指向结点的后一个结点,
p->next = NULL;//p指向结构体的指针域为NULL
/**********found**********/
while (q)//如果q不为空,即q尚未指向链表的最后,执行循环
{ r = q->next;//将q指向的结点的指针域的值备份到指针r中,
q->next = p;//将前一个结点的指针与赋给后一个结点的指针域
p = q;//p指向下一个结点
/**********found**********/
q = r;//q指向下一个节点
}
return p;
}
反向输出单链表结点的思想:在后一个结点的指针域中存放前一个结点的指针,这与链表的结构恰好相反,正常的链表是前一个结点的指针域存放后一个结点的指针。
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言单向链表那边,求大神解释一下那个fun函数为什么是那样的,解释一下...
fun()函数的功能是将单链表的结点反序输出。其基本思想是:NODE *fun(NODE *h)\/\/接收主函数中传递的实参:单链表的头指针 { NODE *p, *q, *r;\/\/定义三个指向结构体的指针,即指向结点的指针,此处尚未初始化 p = h;\/\/结构体指针p指向链表头结点 if (p == NULL)\/\/如果p为空即链表不...

C语言程序中fun函数求解读,求大神附图讲解。万分感谢
\/\/函数用来反转链表 NODEfun(NODEh)NODEp,*q,*r;p=;\/指向链表的第一个结点 if(p=ULL)eturnULL;q-next;\/指向p的下一个结点 p-nextULL;\/第一个结点(反转后的最后结点)指向NULL while(q)r-next;\/时指针用来记录待要反转的结点 q-next;\/转q结点 p;\/指向刚反转的结点 q;\/指向待要反转的...

c语言中fun()函数有什么作用,要有例子说明。
C\/C++语言中,fun函数通常被主函数所调用。它是指用fun来定义一个函数(或方法),这样在引用时可以用fun表示。比如int fun(int x,int y),void fun(char* a,char* b) 等等。有先前的定义,就可以在主函数里调用它,比如ans=fun(3,7);或者fun(p1,p2);fun函数是自定义函数。fun一词没有...

C语言,链表求平均值,我迷茫
LZ指出的地方,思路就是编写链表的时候把平均值当所一个链表对象的属性,而fun这个函数用来求这个属性的值。在struct里不是可以看到有double ave这个成员变量么?这里fun的功能就是接受一个链表对象然后维护出其平均值,所以之后调用fun后s.ave就是链表s的平均值了。

用c语言实现单链表的逆置,能将此程序详细的解释一下吗?
算法的核心就是reverse函数,其它的都是辅助建立链表和输出链表的。从数据结构的定义来看这是一个带头节点的链表。要弄的十分明白你要耐心点画图看看。我简单的说下思路:【head是指向头结点的】p=head; \/\/p最开始指向头结点 s=p->next; \/\/s最开始指向第一个节点 while(s->next!=NULL)\/\/只...

C语言链表很不明白,求详细说一下,非常感谢
这里,选择使用链表来实现,具体的使用单链表中的循环链表来实现。首先先说下链表的实现,1>为了创建一个链表,首先先建一个节点结构:前面说到有变量和线索链接(定义成数据域和指针)struct Node{ int Data; Node *next;};节点的数据域存放计算的数据,节点的next指针域存放指向下一节点的地址...

C语言题 求解答过程
fun()函数是个递归函数。递归函数的特点就是自己调用自己,而每个递归函数都必须要有个出点,不然就变死循环了。fun()函数的出点就是if(x\/2>1)中if条件不成立的时候。程序运行过程分析:1、第一次调用fun()时,x=7,if(x\/2>1),if条件成立,因此进入fun(x\/2),递归调用自己;2、第二次...

求教C语言大神!!!最好讲一下理由,万分感谢
结果是cbade 原因如下:首先,主函数只进行了一个fun操作,其他的就是定义和输出,所以字符串(或者说字符数组)的调整完全由fun决定 fun中首先定义了x和y,因为s的长度是5,所以y = (strlen(s) - 1) \/ 2=(5-1)\/2=2 因此:循环开始时,初始值是x=0,y=2,s="abcde",进入循环 第一次...

c语言开头部分,fun()函数,有的是void fun()。有的是char fun(),还有i...
前面的 void char int 是指函数的返回值类型 比如你做数学题时 不都会最后得到个数嘛,c语言里只不过把函数的值从数学里简单的数字扩大了 void 是指 函数运行完后 啥也不返回 比如说 voidfun(){ printf(" hello word");} 相应的 如果是int fun()意思就是函数结束后返回个 int(整形)...

C语言程序设计求详解求运行过程
第一次调用后,输出: 7,第二次调用后,输出: 15 所以,总的输出是:7,15

相似回答