《剑指offer》-反转链表

输入一个链表,反转链表后,输出链表的所有元素。

题目考察链表反转,但是挖坑不是反转本身,而是题目的描述再次不清晰:什么叫“反转链表后输出链表所有元素”?给的代码框架只有一个函数ReverseList,返回值类型是ListNode*,输出不输出和我有什么关系?

class Solution{
public:
    ListNode* ReverseList(ListNode* pHead){
        if (pHead == NULL){
            return NULL;
        }
        if (pHead->next == NULL) {
            return pHead;
        }

        ListNode* pBefore = pHead;
        ListNode* p = pHead->next;
        ListNode* pAfter = p->next;

        while (pAfter != NULL){
            p->next = pBefore;
            pBefore = p;
            p = pAfter;
            pAfter = pAfter->next;
        }
        p->next = pBefore;
        pHead->next = NULL;   //这句一定要加上,因为逆序后再遍历,需要判断出链表结束,也就是节点的next等于NULL
        return p;
    }
};
时间: 2024-09-28 03:57:14

《剑指offer》-反转链表的相关文章

剑指Offer之链表中倒数第k个结点

题目描述: 输入一个链表,输出该链表中倒数第k个结点. (hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素. 输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素. 输出: 对应每个测试案例, 若有结果,输出相应的查找结果.否则,输出NULL. 样例输入: 5

《剑指offer》-链表找环入口

题目描述 一个链表中包含环,请找出该链表的环的入口结点. 初步想法是每个节点做几个标记,表示是否被访问过,那么遍历链表的时候就知道哪个被访问到了.但是不会实现. 另一个直觉是判断链表有环的算法中出现过的策略,分别按1x和2x速度遍历,总会相遇.假设环长为n. 容易知道,当1x的指针p1和2x的指针p2相遇时,p1走了x步,p2走了2x步,而p2比p1多走的,有两部分:(1)环内部,p1还没有走过的:(2)换内部,p1和p2重合的 这两部分加起来就是整个环.那么其实p2比p1多走的就是这么一个环的

剑指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 [解

[剑指Offer]7.从尾到头打印链表

题目1511:从尾到头打印链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1082 解决:350 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 样例输入: 1 2 3 4 5 -1 样例输出

剑指Offer之合并两个排序的链表

题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. (hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数. 下面一行包括n个数t(1<=t<=1000000):代表链表一中的元素.接下来一行包含m个元素,s(1

[剑指Offer] 第3章课后题详解

[剑指Offer] 第3章课后题详解 目录 剑指Offer 第3章课后题详解 目录 大数加法 分析 解法 优化 链表的中间节点 分析 解法 环形链表 分析 解法 反转链表 分析 解法 大数加法 本题为<剑指Offer>"面试题12:打印1到最大的n位数"一节中的"相关题目". 定义一个函数,在该函数中可以实现任意两个整数的加法. 分析 由于没有限定输入两个数的大小范围,所以需要把它当做大数问题来处理.大数无法用int,long甚至long long类型来

剑指Offer详解之左旋转字符串

(1)暴力移位法 这种方法可能是最直观,最容易想出的方法.但这也是最坏的方法.时间复杂度挺高,用这种方法容易超时. 这种方法是一位一位的移动实现左旋转操作. [代码] #include <stdio.h> #include <malloc.h> #include <string.h> char *str; char* Reverse(char* str,int n){ if(str == NULL || n < 0){ return ""; }

剑指Offer之翻转单词顺序

题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 输入: 每个测试案例为一行,表示一句英文句子. 我们保证一个句子的单词数不会超过600

[剑指Offer]5.二维数组中的查找

题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 [算法系列之三十三]杨氏矩阵 代码 /*--------------------------------------- * 日期:2015-07-19 * 作者:SJF0115 * 题目: 5.二维数组中的查找 * 网址:http://www.nowcoder.com/books/coding-interviews/a

剑指offer之字符串转整数

题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000). 输出: 对应每个测试案例, 若输入为一个合法的字符串(即代表一个整数),则输出这个整数. 若输入为一个非法的字符串,则输出"My God". 样例输入:5-5+8样例输出:5-58    关于这道题目,题目本身还是不错的,真正核心的代码也就那么两行,大部分代码基