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张图片搞定),如下:
以下是while循环(条件:香头指向不为空)
第一个循环把马弄到车前面,
第二个循环把相弄到马前面
第三个循环把士弄到相前面
........
直到香指向为空后停止循环。
代码如下:只需要一个首结点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:香头跟着铁头
}
自己用道具操作几遍,然后把流程背会,以后自己根据流程写代码即可。
用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语言中是使用指针变量来存放一种类型数据的首地址的,所以这里单链表的结构体定义,有点类似与递归...