/*
0 2 4 6 8
8 6 4 2 0
Press any key to continue
*/
#include <stdio.h>
#include <stdlib.h>
#define ELTYPE int
typedef struct node {
ELTYPE m;
struct node *next;
} *NODE;
void InversionNode(NODE head) {
NODE p,t,q;
p = NULL;
t = head->next;
q = t->next;
if(t == NULL || q == NULL) return; // 空表和仅有一个结点的链表不用倒置
while(q) {
t->next = p; // 倒置结点
p = t; // p指向新倒置的结点
t = q; // 前进一个结点
q = q->next;
}
t->next = p; // 处理最后一个结点
head->next = t; // head指向倒置后的链表
}
void ShowNode(NODE head) {
NODE p = head->next;
for(;p;p = p->next){
printf("%d ",p->m);
}
printf("\n");
}
NODE CreatNode(int n) { // 创建有头结点的单向链表
int i;
NODE head,p,q;
head = p = (NODE)malloc(sizeof(struct node));
for(i = 0; i < n; ++i) {
q = (NODE)malloc(sizeof(struct node));
q->m = 2 * i;
p->next = q;
p = q;
}
p->next = NULL;
return head;
}
int main() {
NODE head = CreatNode(8);
ShowNode(head);
InversionNode(head);
ShowNode(head);
return 0;
}
分享到:
相关推荐
我们可以创建一个虚拟头节点 `sentinel`,使得处理链表的开头变得简单。然后,我们用一个指针 `trunk` 指向虚拟头节点。在主循环中,我们检查是否还有足够的节点可以进行翻转,如果不足 k 个节点,则停止翻转。接...
然后创建链表类,包含初始化、输入、输出、翻转(非递归)、翻转(递归)和获取头节点的私有方法。在翻转(非递归)函数中,设置current、pnext和ptr三个指针,并通过循环进行翻转操作。递归翻转函数则通过递归调用...
在本实验中,我们将实现一个单链表的类,包括链表的创建、链表元素的插入、链表元素的查找、链表元素的删除、打印所有的链表元素、翻转链表等操作。 链表的创建 在本实验中,我们使用模板类来实现单链表,链表的每...
单链表的各种操作,适合于初学,也适合于复习 单链表操作介绍 1. 创建头节点 ...12. 面试中常见:单链表翻转 13. 已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序,要求用递归方法
1. **数据存储**:创建一个足够大的结构体数组`Node a[N]`,用于模拟链表节点。每个结构体包含三个字段:`data`存储节点的数据,`address`存储节点的地址,`next`存储指向下一个节点的地址。 2. **输入处理**:从...
堆栈法通过创建一个堆栈,将链表的所有节点依次压入堆栈。当链表遍历完成后,堆栈顶部的节点就是原链表的最后一个节点,将其设为新链表的头节点。然后,依次弹出堆栈中的节点,将其next指针指向堆栈中的下一个节点...
在测试代码中,我们创建了一个长度为10的链表,然后使用上述两种方法之一进行翻转,并输出翻转后的链表。这有助于验证翻转操作的正确性。 ```php function test() { // 创建链表 $head = new Node(0); // ... ...
`main()`函数组织了游戏流程,包括链表的创建、翻牌算法的调用以及最终结果的输出。 #### 调试分析与性能考量 在实际运行中,该算法的时间复杂度为O(n^2),其中n为牌的数量。这意味着随着牌数的增加,算法的执行...
- 使用尾插法创建链表,函数原型如下: ```c LinkList* creat(int k); ``` - 函数参数`k`表示链表中节点的数量,即52。 3. **翻牌函数**: - 遍历链表,根据基数翻转符合条件的牌。 - 函数原型如下: ```c ...
2. 初始化链表:创建链表时,我们需要创建一个头节点,其next指针通常初始化为NULL,表示链表为空。 ```c Node* createEmptyList() { Node* head = (Node*)malloc(sizeof(Node)); head->next = NULL; return ...
该设计使用了一个抽象数据类型 ADT LNode 来定义链表的节点,并使用了函数 InitList 和 Creater 来初始化链表和创建链表的节点。 课题设计 3:商品货架管理 该设计旨在解决商品货架管理问题,即设计一个算法,每一...
36. 链表创建:动态内存分配创建链表节点。 37. 链表反向:通过改变节点指针实现链表反向。 38. 链表合并:连接两个链表头部,形成新的链表。 39. 求和函数:指针作为参数,计算部分和。 40. 字符串排序:字符串字符...
在这个问题中,程序创建了一个双向链表,其元素为包含一个double类型值和一个指向下一个节点的指针的结构体。程序首先读取输入的数值,然后构建链表,直到输入的数值为负数为止。链表的每个节点都通过指针连接,最后...
通过定义结构体`Lnode`,包含系数`coef`和指数`exp`,创建了一个链表来表示多项式。`input()`函数用于输入多项式项,`add()`和`minus()`函数分别执行加法和减法操作。这些函数使用了链表的基本操作,如尾插法建立...
- **显示**:遍历链表输出所有元素。 - **查找**:在链表中查找特定元素,记录比较次数。 - **插入**:在链表中插入元素,需要调整指针关系。 - **删除**:删除链表中的元素,同样涉及指针更新。 - **逆置**:...
在`__main__`部分,我们创建了一个包含9个节点的链表,并调用`Reserver`函数进行反转,然后打印出反转后的链表元素,以验证反转操作的正确性。 总结来说,单链表的反转是通过迭代或递归的方式,改变节点间的连接...
学生需要编写输入函数创建二叉树,然后实现层次遍历和先序遍历的输出函数。这要求理解二叉树的存储结构,以及遍历算法的实现。 主控模块设计包括需求分析、总体思路和程序流程。用户界面显示主菜单,允许用户选择...
这些库提供了在终端输出彩色字符、接受键盘输入等功能,使得在命令行界面下也能创建交互式的游戏体验。 此外,考虑到游戏的重玩功能,源码中可能包含了初始化游戏状态的函数,用于重新洗牌并设置所有卡片为未翻转...