`
SunnyYoona
  • 浏览: 368456 次
社区版块
存档分类
最新评论

剑指Offer之反转链表

 
阅读更多

题目描述:

输入一个链表,反转链表后,输出链表的所有元素。
(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个结点、反转链表、合并排序链表

    【Python学习-链表】【剑指offer】之链表中倒数第k个结点、反转链表、合并排序链表题目分析代码反转链表分析代码合并排序链表分析代码 题目 输入一个链表,输出该链表中倒数第k个结点。 分析 方法一:先计数,在查询...

    Python《剑指offer》算法实现-反转链表

    # Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...

    《剑指Offer》题目及代码.zip

    《剑指Offer》 1. 赋值运算函数 2. 单例设计模式 3. 二维数组中查找目标值 4. 替换字符串中的空格 5. 从尾到头打印链表 6. 由前序和中序遍历重建二叉树 7. 用两个栈实现队列 8. 求旋转数组的最小数字 9. ...

    imhuay#studies#剑指Offer_2400_简单_反转链表1

    思路# Definition for singly-linked list.self.ret = cur # 尾节点,即新链表的头节点head.next = N

    代码_反转链表_

    使用Java语言实现剑指offer上面的第22题,反转链表。

    PearlCoastal#Leetcode_Solutions_python3#剑指 Offer 241

    剑指 Offer 24. 反转链表方法一: 迭代方法二: 递归题目描述方法一: 迭代思路然后继续往前走, 用 temp 保存 fast 的下一步节点值。代码复杂

    《剑指Offer》题目及代码1

    15. 找链表中倒数第K个节点1116. 输出反转后的链表1217. 合并两个有序链表1218. 判断二叉树A中是否包含子树B1319. 二叉树的镜像1320.

    剑指offer之python实现

    面试题16 反转链表 面试题17 合并两个排序的链表 面试题18 树的子结构 第4章 解决面试题思路 4.2 画图让抽象问题形象化 面试题19 二叉树的镜像 面试题20 顺时针打印矩阵 4.3 举例让抽象问题具体化 面试题21 包含min...

    剑指offer算法题Python源码带详细思路注释(68道).zip

    翻转单词顺序列,反转链表,斐波那契数列,复杂链表的复制,构建乘积数组,和为s的连续整数序列,和为s的两个数字,滑动窗口的最大值,机器人的运动范围,剑指offer-python实现.docx,矩形覆盖,矩阵中的路径,连续子数组的最大...

    剑指Offer(Python多种思路实现):反转链表

    题目:反转链表 题:输入一个链表,反转链表并输出反转后链表的头节点。 解题思路一:注意反转时出现断裂现象,定义3个指针,分别指向当前遍历到的节点pNode、它的前一个节点pPrev及后一个节点pNext。 class ...

    leetcode中文版-jianzhi-Offer-Leetcode:剑指Offer与Leetcode对应题目

    《剑指Offer》与Leetcode主站题目链接对应 update:中文版leetcode已发布剑指offer授权的刷题合集: 本帖记录剑指offer在leetcode主站的原题。 无 无 数组中重复的数字 -&gt; (中文版) 二维数组中的查找 -&gt; 替换空格 ...

    《剑指Offer》刷题笔记——面试题24. 反转链表

    难度:简单 一、题目描述: 二、解题分析: 1、leetcode解析 2、测试用例 3、代码实现 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): ... def reverseList(self, head: ...

    leetcode2-Coding-Interviews:剑指offer代码实现

    剑指offer代码实现,通过。 # Title Solution Tag Note LeetCode 1 二维数组中的查找 数组 2 替换空格 字符串 3 从尾到头打印链表 链表 4 重建二叉树 树 5 用两个栈实现队列 栈和队列 LeetCode 232 6 旋转数组的最小...

    leetcode矩阵旋转任意角度-SwordRefersToOffer:剑指offer的C++代码,在ubuntu上CLion测试

    剑指offer 简介 编程环境:Ubuntu CLion 提交网站:牛客网 &gt; 在线编程 &gt; 剑指Offer 可以将代码复制到Test文件夹运行 CODE 题目描述 main1.cpp 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右...

    leetcode-python:leetcode刷题记录

    剑指Offer 07. 重建二叉树 二叉树,前序遍历,中序遍历 剑指Offer 09. 用两个栈实现队列 栈与队列的操作 503. 下一个更大元素 II 单调栈 剑指Offer 18. 删除链表的节点 链表双指针 剑指Offer 22. 链表中倒数第k个...

    leetcode中国-LeetCode-Go:力码围棋

    leetcode中国 LeetCode 刷题记录 分类 二维数组 题目名称 goldhadis Toetoise FlashOpen-Go 对角线遍历 ...剑指 Offer ...剑指 Offer ...剑指 Offer ...剑指 Offer ...剑指 ...反转链表 Y Y Y 剑指 Offer 25. 合并

    Leetcode扑克-jianzhi-offer:剑指offer-Java题解

    剑指offer-Java题解 二维数组中的查找 - [行列递增的二维数组搜索]- leetcode 240 替换空格 从尾到头打印链表 重建二叉树 - [用前序和中序遍历序列构建二叉树] - leetcode 105 用两个栈实现队列 - [使用栈实现队列] ...

    买股票最佳时期leetcode-Data_Structure_Exercises:LeetCode刷题记录、《剑指Offer》书中相关面试题及

    其中《剑指Offer》书中相关试题的Python实现主要参考《剑指offer(第二版)》和。 哈希表: 面试题50:第一个只出现一次的字符 链表: 面试题06:从尾到头打印链表 (单向链表的增删改查,栈,递归) 面试题18:删除...

    leetcode2sumc-Coding:Java语言|《剑指offer》与leetcode|AC万万岁!

    《剑指offer》java代码实现,一本关于面试算法题经典的书。 《玩转算法面试》,慕课课程,对leetcode的题目分门别类进行讲解,讲的很好,力荐。 排序算法,快排,归并排序,堆排。 数据结构,目前有循环队列、AVL树...

    leetcode气温-LeetCodeExercise:每日代码

    剑指offer3 数组中重复的数字 leetcode 75 颜色分类 leetcode 54 螺旋矩阵 leetcode 560 和为K的子数组 链表: 题号 题目 leetcode 21 合并两个有序链表 leetcode 203 移除链表元素 leetcode 206 反转链表 leetcode ...

Global site tag (gtag.js) - Google Analytics