c单链表倒置代码看不懂。。

viod turn(slink *head){
slink *p,*q;
p=head->next;
head->next=Null;
while(p!=NULL){
q=p->next;
p->next=head->next;
head->next=p;
p=q;
}
}
这里的p->next=head->next; head->next=p; 看不懂了,之前p=head->next; p已经赋值了么,后面再head->next=p;是什么个意思啊

扣着的是头节点(头子

是首节点(首子

是次节点(次子

牙签细的是指针指向,香头发黑的是指向,铁头细的是指向。

根据步骤写程序的伪算法(3步4循环,7张图片搞定),如下:


1:香头指向首子,铁头指向次子。

2:删掉首子指向次子的牙签

3:香头跟着铁头

以下是while循环(条件:香头指向不为空)

循环1:铁头移动到香头的下一个

循环2:香头的下一个指向首子

循环3:头指针的下一个跟着香头

循环4:香头跟着铁头

整理后如下,然后再一个循环开始

第一个循环把马弄到车前面,

第二个循环把相弄到马前面

第三个循环把士弄到相前面

........

直到香指向为空后停止循环。

代码如下:只需要一个首结点pHead,就能把链表找到,并倒置。具体代码如下

p香=pHead->pNext;

p铁=p香->pNext;

p香->pNext=NULL;

P香=p铁

while(p香 !=NULL)

{

     p铁=p香->pNext;

     p香->pNext=pHead->pNext;

     pHead->pNext=p香;

     p香=p铁;

}


对照伪算法(三步四循环),和上面的代码是一一对应的:

第一步:香头指向首子,铁头指向次子

第二步:删掉首子指向次子(铁头所指向的那个子)的牙签

第三步:香头跟着铁头

以下循环条件:(条件:香头指向不为空)

{

    循环1:铁头移动到香头的下一个指向

    循环2:香头的下一个指向首子

    循环3:头子的下一个跟着香头

    循环4:香头跟着铁头

}

自己用道具操作几遍,然后把流程背会,以后自己根据流程写代码即可。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-07
这是一个单向不循环链表,
p->next=head->next; head->next=p;这两句的作用就是 将 p 结点插到 head 结点之后

q=p->next; p=q; 这两句的作用就是顺序轮询链表
合起来的作用就是倒一个序了
第2个回答  推荐于2017-11-26
这段代码主要功能是:从单链表的第一个结点开始依次取出各个结点,做头插操作,即实现链表的倒置。
p=head->next;意思是取到单链表的第一个结点;

p->next=head->next;①
head->next=p;②
上两句实现的是头插功能,将 p 结点插到 head 结点之后
,p记为取出的结点,①将p指向第一个结点,即head结点的下一个节点,②修改head结点的指向本回答被提问者采纳

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

下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,求大神...
void reverse(linklist &L){ linklist p = NULL, q = L; while(q != NULL){ L = q->next; \/\/ 保留下一个节点 q->next = p; p = q; q = L; \/\/ 移动到下一个节点 } L = p; \/\/ 指向逆置后的头节点} ...

数据结构,单链表反转问题,
根据步骤写程序的伪算法(3步4循环,7张图片搞定),如下:以下是while循环(条件:香头指向不为空)第一个循环把马弄到车前面,第二个循环把相弄到马前面 第三个循环把士弄到相前面 ...直到香指向为空后停止循环。代码如下:只需要一个首结点pHead,就能把链表找到,并倒置。具体代码如下 p香=p...

数据结构(C语言版),带头结点的单链表,初始化。不懂的在算法里批注了...
viod CreateList_L(Linklist &L,int n){ \/\/逆位序输入n个元素的值 这是写程序的人的注释 逆序体现在插入数据时,不是在尾部追加,而是从头部加入 每次输入的数据结点,都会成为当前的数据头 正向遍历数据(表头到表尾)时,所显示的数据与录入的顺序是相反的。L=(Linklist)malloc(sizeof(Lnode...

C语言单链表创建和排序问题代码问题,我运行时老是程序错误,不知道哪 ...
3、关于冒泡排序的问题,你可以在看看在百度百科上的例子。我其实不太习惯官方的冒泡排序方式,我更喜欢借鉴他的实现原理而稍微改一改。4、定义变量的时候最好还是初始化一下,这样排除错误的时候可以方便很多。下面是改好的代码:include <stdio.h> #include <stdlib.h>typedef struct node{int data;...

C语言程序题: 单链表的倒序 要求输入一个单链表 如12345五个数会输出...
每次拿头元素来用头插法新建一个链表,先记住头节点的下一个不然链表要丢 用栈也行,全部压栈弹出来

求一个C语言单链表的排序函数,很急很急
用选择排序就行,代码如下。链表结构如下:typedef struct Node { T value;struct Node *link;}Node;void selectSort(Node *node){ Node *cur; \/*当前节点*\/ Node *next; \/*遍历未排序节点*\/ Node *min; \/*指向未排序节点中最小节点*\/ T temp;\/*从头节点的下一个节点开始,一直到倒数第二...

C语言实现线性表的逆置问题,顺序和单链表。在线等高手
第一种情况,其实可以考虑用头插法,来实现逆置。下面的算法是基于头插法的思想,逆置链表的,仅供参考。LinkList anti_linklist(LinkList demo){ LInkList *p,*q;\/\/work pointer LinkList head;head=new LinkList();head->next=null;\/\/init head pointer p=demo->head->next;\/\/make p points...

C语言数据结构单链表初始化
你说的那个是逆序建立n个节点的链表,建完头结点后由于链表中没有其他节点就把头结点的next置为空,这一点如果不明白的话去看链表那一章,有介绍!!!之后从后往前建立链表!!刚开始是L->next =NULL 要注意p是每次新建的节点,这样从后往前以此建立链表,只要明白p是每次新建的节点,和从后往前...

[c] _ c中的单链表与文件读写
c语言中链表是用结构体来实现的.我们知道,c语言不像高级语言,不支持面向对象,可以自定义类和对象,而是直接通过结构体来定义自定义类型,C语言通过这种方式来描述众多的复杂类型数据.解决实际问题的.我们知道c语言中是使用指针变量来存放一种类型数据的首地址的,所以这里单链表的结构体定义,有点类似与递归...

相似回答