【剑指offer】面试题16:反转链表
来源:互联网 发布:有话好好说 知乎 编辑:程序博客网 时间:2024/04/29 07:52
- 题目描述:
输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)
- 输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。
- 输出:
对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。
- 样例输入:
51 2 3 4 50
- 样例输出:
5 4 3 2 1NULL
完整代码如下:
#include <stdio.h>#include <stdlib.h>typedef struct ListNode{ int data; struct ListNode *next;}ListNode,*LinkList;void InitList(LinkList *head);void CreateList(LinkList head,int n);void DestoryList(LinkList head);void PrintList(LinkList head);void ReverseList(LinkList head);int main(void){ LinkList head; int n; InitList(&head); while(scanf("%d",&n) == 1){ if(n<=0){ printf("NULL\n"); continue; } CreateList(head,n);// PrintList(head); ReverseList(head); PrintList(head); DestoryList(head);// PrintList(head); } return 0;}//带有头结点的链表void InitList(LinkList *head){ *head = (LinkList)malloc(sizeof(ListNode)); if(!*head) exit(-1); (*head)->next = NULL;}void CreateList(LinkList head,int n){ LinkList p = head->next; int e; for(int i = 0;i < n;++i){ scanf("%d",&e); LinkList q = (LinkList)malloc(sizeof(ListNode)); if(!q) exit(-1); q->data = e; q->next = NULL; if(p == NULL){ head->next = p = q; }else{ p->next = q; p = q; } }}void DestoryList(LinkList head){ LinkList p = head->next; while(p){ LinkList q = p->next; free(p); p = q; } head->next = NULL; //这句话必须加上}void PrintList(LinkList head){ LinkList p = head->next; while(p){ printf("%d ",p->data); p = p->next; } printf("\n");}void ReverseList(LinkList head){ LinkList pLow,pMid,pHight; if(head == NULL){ //我们也要考虑当传入的指针为空的情况,尽管我们设置了头结点,但以防万一 return ; } if(head->next == NULL || head->next->next == NULL) return ; pLow = head->next; pMid = pLow->next; pHight = pMid->next; pLow->next = NULL; //指针的赋值考虑全,不然得不到可靠的程序 while(pMid){ //判断中间指针是否为空, pMid->next = pLow; if(pHight == NULL) //必须判断,否则下面没法用pHight = pMid->next; break; pLow = pMid; pMid = pHight; pHight = pMid->next; } head->next = pMid;}
0 0
- 《剑指Offer》面试题:反转链表
- [剑指offer][面试题16]反转链表
- 【剑指offer】面试题16:反转链表
- 剑指offer 面试题16 反转链表
- 剑指Offer面试题16 反转链表
- 《剑指Offer》面试题16:反转链表
- 《剑指Offer》学习笔记--面试题16:反转链表
- 剑指offer 面试题16—反转链表
- 【剑指Offer学习】【面试题16 :反转链表】
- 剑指offer面试题16-反转链表
- 剑指offer面试题16之反转链表
- 剑指offer:面试题16 反转链表
- 剑指offer-面试题16:反转链表
- 剑指offer之面试题16:反转链表
- 剑指Offer----面试题16:反转链表
- 剑指offer面试题16:反转链表
- 剑指offer--面试题16: 反转链表
- 剑指offer——面试题16:反转链表
- SpringDI
- 代码简洁之道——注释
- 制作简易计算器封装类
- 多年后
- bzoj1680[Usaco2005 Mar]Yogurt factory
- 【剑指offer】面试题16:反转链表
- 制作简易计算器处理过程Servlet
- *p=&a
- LCD 每隔10分钟 自动熄灭 --打开Framebuffer console的时候
- C#入门基础编程(第一章)
- 制作简易计算器处理结果Servlet
- 在排序数组中,找出给定数字的出现次数 比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
- 那年,我们放生的烟火
- 微博开篇,不断提升自己,立此为证