题目描述:
输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)
输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。
输出:
对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。
样例输入:
5
1 2 3 4 5
0
样例输出:
5 4 3 2 1
NULL
【解析】
【代码】
/*********************************
* 日期:2013-11-21
* 作者:SJF0115
* 题号: 题目1518:反转链表
* 来源:http://ac.jobdu.com/problem.php?pid=1518
* 结果:AC
* 来源:剑指Offer
* 总结:
**********************************/
#include<iostream>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
using namespace std;
typedef struct ListNode{
int value;
struct ListNode *next;
}ListNode;
ListNode* ReverseList(ListNode*head){
//容错处理
if(head == NULL){
return NULL;
}
else{
ListNode *p,*pre,*pnext;
//带头节点的链表
pre = NULL;
p = head->next;
while(p != NULL){
pnext = p->next;
//最后一个节点
if(pnext == NULL){
head = p;
}
p->next = pre;
pre = p;
p = pnext;
}
return head;
}
}
int main()
{
int i,n;
while(scanf("%d",&n) != EOF){
ListNode *head,*p,*pre;
//创建链表
head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
pre = head;
for(i = 0;i < n;i++){
p = (ListNode*)malloc(sizeof(ListNode));
scanf("%d",&p->value);
p->next = NULL;
pre->next = p;
pre = p;
}
//无数据
if(n <= 0){
printf("NULL\n");
}
//输出反转后数据
else{
//反转
head = ReverseList(head);
//输出
p = head;
while(p != NULL){
if(p->next == NULL){
printf("%d\n",p->value);
}
else{
printf("%d ",p->value);
}
p = p->next;
}
}
}
return 0;
}
/*********************************
* 日期:2013-11-21
* 作者:SJF0115
* 题号: 题目1518:反转链表
* 来源:http://ac.jobdu.com/problem.php?pid=1518
* 结果:AC
* 来源:剑指Offer
* 总结:
**********************************/
#include<iostream>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
using namespace std;
typedef struct ListNode{
int value;
struct ListNode *next;
}ListNode;
ListNode* ReverseList(ListNode*head){
//容错处理
if(head == NULL){
return NULL;
}
else{
ListNode *p,*pnext;
//带头节点的链表
p = head->next;
head->next = NULL;
while(p != NULL){
pnext = p->next;
p->next = head->next;
head->next = p;
p = pnext;
}
return head;
}
}
int main()
{
int i,n;
while(scanf("%d",&n) != EOF){
ListNode *head,*p,*pre;
//创建链表
head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
pre = head;
for(i = 0;i < n;i++){
p = (ListNode*)malloc(sizeof(ListNode));
scanf("%d",&p->value);
p->next = NULL;
pre->next = p;
pre = p;
}
//无数据
if(n <= 0){
printf("NULL\n");
}
//输出反转后数据
else{
//反转
head = ReverseList(head);
//输出
p = head->next;
while(p != NULL){
if(p->next == NULL){
printf("%d\n",p->value);
}
else{
printf("%d ",p->value);
}
p = p->next;
}
}
}
return 0;
}
分享到:
相关推荐
【Python学习-链表】【剑指offer】之链表中倒数第k个结点、反转链表、合并排序链表题目分析代码反转链表分析代码合并排序链表分析代码 题目 输入一个链表,输出该链表中倒数第k个结点。 分析 方法一:先计数,在查询...
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
《剑指Offer》 1. 赋值运算函数 2. 单例设计模式 3. 二维数组中查找目标值 4. 替换字符串中的空格 5. 从尾到头打印链表 6. 由前序和中序遍历重建二叉树 7. 用两个栈实现队列 8. 求旋转数组的最小数字 9. ...
思路# Definition for singly-linked list.self.ret = cur # 尾节点,即新链表的头节点head.next = N
使用Java语言实现剑指offer上面的第22题,反转链表。
剑指 Offer 24. 反转链表方法一: 迭代方法二: 递归题目描述方法一: 迭代思路然后继续往前走, 用 temp 保存 fast 的下一步节点值。代码复杂
15. 找链表中倒数第K个节点1116. 输出反转后的链表1217. 合并两个有序链表1218. 判断二叉树A中是否包含子树B1319. 二叉树的镜像1320.
面试题16 反转链表 面试题17 合并两个排序的链表 面试题18 树的子结构 第4章 解决面试题思路 4.2 画图让抽象问题形象化 面试题19 二叉树的镜像 面试题20 顺时针打印矩阵 4.3 举例让抽象问题具体化 面试题21 包含min...
题目:反转链表 题:输入一个链表,反转链表并输出反转后链表的头节点。 解题思路一:注意反转时出现断裂现象,定义3个指针,分别指向当前遍历到的节点pNode、它的前一个节点pPrev及后一个节点pNext。 class ...
《剑指Offer》与Leetcode主站题目链接对应 update:中文版leetcode已发布剑指offer授权的刷题合集: 本帖记录剑指offer在leetcode主站的原题。 无 无 数组中重复的数字 -> (中文版) 二维数组中的查找 -> 替换空格 ...
难度:简单 一、题目描述: 二、解题分析: 1、leetcode解析 2、测试用例 3、代码实现 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): ... def reverseList(self, head: ...
剑指offer代码实现,通过。 # Title Solution Tag Note LeetCode 1 二维数组中的查找 数组 2 替换空格 字符串 3 从尾到头打印链表 链表 4 重建二叉树 树 5 用两个栈实现队列 栈和队列 LeetCode 232 6 旋转数组的最小...
剑指offer 简介 编程环境:Ubuntu CLion 提交网站:牛客网 > 在线编程 > 剑指Offer 可以将代码复制到Test文件夹运行 CODE 题目描述 main1.cpp 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右...
剑指Offer 07. 重建二叉树 二叉树,前序遍历,中序遍历 剑指Offer 09. 用两个栈实现队列 栈与队列的操作 503. 下一个更大元素 II 单调栈 剑指Offer 18. 删除链表的节点 链表双指针 剑指Offer 22. 链表中倒数第k个...
leetcode中国 LeetCode 刷题记录 分类 二维数组 题目名称 goldhadis Toetoise FlashOpen-Go 对角线遍历 ...剑指 Offer ...剑指 Offer ...剑指 Offer ...剑指 Offer ...剑指 ...反转链表 Y Y Y 剑指 Offer 25. 合并
剑指offer-Java题解 二维数组中的查找 - [行列递增的二维数组搜索]- leetcode 240 替换空格 从尾到头打印链表 重建二叉树 - [用前序和中序遍历序列构建二叉树] - leetcode 105 用两个栈实现队列 - [使用栈实现队列] ...
其中《剑指Offer》书中相关试题的Python实现主要参考《剑指offer(第二版)》和。 哈希表: 面试题50:第一个只出现一次的字符 链表: 面试题06:从尾到头打印链表 (单向链表的增删改查,栈,递归) 面试题18:删除...
《剑指offer》java代码实现,一本关于面试算法题经典的书。 《玩转算法面试》,慕课课程,对leetcode的题目分门别类进行讲解,讲的很好,力荐。 排序算法,快排,归并排序,堆排。 数据结构,目前有循环队列、AVL树...
剑指offer3 数组中重复的数字 leetcode 75 颜色分类 leetcode 54 螺旋矩阵 leetcode 560 和为K的子数组 链表: 题号 题目 leetcode 21 合并两个有序链表 leetcode 203 移除链表元素 leetcode 206 反转链表 leetcode ...
每日刷题计划,记录做过的题目,内容包含剑指offer、程序员面试金典(CTCI)、数据结构 下面标题括号内的为对应包名 剑指offer(offer) java实现 03二维数组中的查找 04替换空格 05从尾到头打印链表 06重建二叉树 07用...