输入一个链表的头结点,从尾到头反过来输出每个结点的值。
来源:互联网 发布:oa系统集成阿里云邮箱 编辑:程序博客网 时间:2024/04/27 18:31
对于这个问题,可以利用"栈"的后进先出的思想,将链表中的节点先入栈后再出栈,这样就可以将链表从头 到位翻转过来。从网上搜索一下,没有找到可以直接调用栈的的方法,因此要用C语言实现必须要先写完栈的基本操作(入栈、出栈、初始化),幸好以前写过一个栈的基本操作的源码,可以把它放到工程中。
head.h文件
#ifndef HEAD_H_#define HEAD_H_#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <stdbool.h>#endif
stack.h文件
#ifndef STACK_H_#define STACK_H_#include "head.h"typedef struct node{ int data;//数据域 struct node *pNext;//指针域}NODE, *PNODE;typedef struct stack{ PNODE top; PNODE buttom;}STACK, *PSTACK;void initStack(PSTACK ps);void pushStack(PSTACK ps, int val);void traverse(PSTACK ps);bool empty(PSTACK ps);bool pop(PSTACK ps, int *pval);void clear(PSTACK ps);#endif
stack.c文件
#include "stack.h"/**初始化栈**/void initStack(PSTACK ps){ ps->top = (PNODE)malloc(sizeof(NODE)); if(NULL == ps->top) { printf("动态内存分配失败\n"); exit(-1); } else { ps->top->pNext = NULL;//将栈顶指针指向的节点的指针域赋为空 ps->buttom = ps->top;//将栈顶指针付给栈底指针 }}/**入栈**/void pushStack(PSTACK ps, int val)//在ps栈中压入值val{ PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = val;//将要压入的值赋给新申请的节点的数据域中 pNew->pNext = NULL;//将新申请的节点的指针赋为空 /////////////////////////////////////////////////// pNew->pNext = ps->top; ps->top = pNew;}/**遍历**/void traverse(PSTACK ps){ PNODE p; p = ps->top; while(p != ps->buttom) { printf("%d ",p->data); p = p->pNext; } printf("\n");}/**判空**/bool empty(PSTACK ps){ if(ps->top == ps->buttom) return true; else return false;}/**出栈**/bool pop(PSTACK ps, int *pval){ PNODE rm; if(empty(ps)) return false; else { rm = ps->top; *pval = rm->data; ps->top = rm->pNext; free(rm); rm = NULL;//当不在使用申请的内存时,记得释放。释放后应该把指向这块内存的指针指向NULL //以防程序后面不小心使用它。 return true; }}/**清空栈**/void clear(PSTACK ps){ PNODE p = ps->top; PNODE q = NULL; while(p != ps->buttom) { q = p->pNext; free(p);//释放p所指向的用函数malloc所申请的空间 p = q; } ps->top = ps->buttom;}
main函数
#include "head.h"#include "stack.h"typedef struct Lnode{ int data; struct Lnode *pNode;}Node, *PNode;int main(){ STACK stack; PNode pHead, p,p1; int i,save,num; pHead = (PNode)malloc(sizeof(Node)); pHead->pNode = NULL; p = pHead; printf("请输入链表的节点个数:\n"); scanf("%d\n",&num); for(i = 0; i < num;i++) { p1 = (PNode)malloc (sizeof(Node)); p1->pNode = NULL; scanf("%d",&p1->data); p->pNode = p1; p = p1; } p = pHead->pNode; while(p != NULL) { printf("%d",p->data); p = p->pNode; } initStack(&stack); p = pHead->pNode; while(p != NULL) { pushStack(&stack,p->data); p = p->pNode; } printf("\n"); for(i = 0;i < num; i ++) { pop(&stack, &save); printf("%d",save); } return 0;}
0 0
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值。
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来打印每个结点的值
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来打印每个节点的值。
- 输入一个链表的头结点,从尾到头反过来打印每个节点的值。
- 输入一个链表的头结点,从尾到头反过来打印出每个结点的值
- 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值
- 输入一个链表的头结点,从尾到头反过来打印每个结点的值——5
- 码率控制技术原理
- iptables 学习
- 青春无悔
- APUE NOTE
- b1
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值。
- hdu 2594 kmp
- 伤心是每个故事最最无奈的结局
- Excel中时间格式数据转为文本格式数据
- DELPhI XE5 控件
- 编译bash
- Kruskal算法
- ol和ul列表标签——HTML5一些比较基础的东西
- 张国荣辞世十周年纪念