博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LintCode 532: Reverse Pairs
阅读量:5027 次
发布时间:2019-06-12

本文共 2698 字,大约阅读时间需要 8 分钟。

LintCode 35: Reverse Linked List

题目描述

翻转一个链表。

样例

给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

Thu Sep 21 2017

思路

本题的思路很多,今天把之前的方法改进了一下,使用两个指针就可以达到目的了(实际上也用了三个指针,但之前的方法太繁琐了)。

翻转链表的本质是将原本的“箭头”反转,这个操作在只有两个元素的时候很好实现,就一条赋值语句即可。而到了多个元素的时候,只需多考虑一下怎么暂存指针地址,避免链表“断掉”后找不到节点的情况就行了。

代码

// 反转链表class Solution {public:    /**     * @param head: The first node of linked list.     * @return: The new head of reversed linked list.     */    ListNode* reverse(ListNode* head)    {        ListNode* pNewHead;        if (head == NULL || head->next == NULL) return head;        ListNode *p1 = head, *p2 = head->next;        while (p2 != NULL)        {            ListNode* p3 = p2->next;            p2->next = p1;            p1 = p2;            p2 = p3;        }        pNewHead = p1;        head->next = NULL;        return pNewHead;    }};

Mon Mar 6 2017

思路

这道题的方法就很多了,我这里第一想到的就是用三个指针来实现,可能我以前这么实现过吧。

不过这个方法并不是最优的方法,还可以用两个指针,或者递归实现,这些坑以后再补吧。

代码

// 反转链表class Solution {public:    /**     * @param head: The first node of linked list.     * @return: The new head of reversed linked list.     */    ListNode *reverse(ListNode *head) {        ListNode* ans;        if (head == NULL || head->next == NULL) return head;        else if (head->next->next == NULL)        {            head->next->next = head;            ans = head->next;            head->next = NULL;            return ans;        }        ListNode *p1 = head, *p2, *p3;        while(1)        {            p2 = p1->next;            p1 =         }    }    ListNode *reverse(ListNode *head) {        ListNode* ans;        if (head == NULL || head->next == NULL) return head;        else if (head->next->next == NULL)        {            head->next->next = head;            ans = head->next;            head->next = NULL;            return ans;        }        ListNode* p1 = head, *p2 = NULL, *p3 = NULL;        while(1)        {            if (p1 != NULL && p1->next != NULL && p1->next->next != NULL)            {                p2 = p1->next;                p1->next = p3;                p3 = p2->next;                p2->next = p1;                p1 = p3->next;                p3->next = p2;                continue;            }            else if (p1 != NULL && p1->next != NULL && p1->next->next == NULL)            {                ans = p1->next;                ans->next = p1;                p1->next = p3;            }            else if (p1 != NULL && p1->next == NULL)            {                ans = p1;                ans->next = p3;            }            else            {                ans = p3;            }            break;        }        head->next = NULL;        return ans;    }};

转载于:https://www.cnblogs.com/genkun/p/5957398.html

你可能感兴趣的文章
开户vim编程之--cscope支持
查看>>
python数据类型图解
查看>>
js获取标准北京时间
查看>>
DZ!NT论坛 3.6.711删除用户各种错解决方案
查看>>
C#微信登录-手机网站APP应用
查看>>
HTML5实践 -- iPhone Safari Viewport Scaling Bug
查看>>
1.4 - 数据类型/字符编码练习题
查看>>
JAVAWEB 一一 Hibernate(框架)
查看>>
函数式编程基础(F#,JS)
查看>>
IntelliJ IDEA使用教程
查看>>
将ASP.NET页面内的数据导出到Excel 或 Word中
查看>>
unity入门笔记
查看>>
html5的cavans
查看>>
闰年测试
查看>>
JSP笔记(一)
查看>>
Android工具HierarchyViewer 代码导读(1) -- 功能实现演示
查看>>
Java基础——多态
查看>>
python-Django与Nginx整合gunicorn模块
查看>>
Java--集合框架
查看>>
基础 - client可视区域
查看>>