【LeetCode】反转链表

题目描述:

反转一个单链表。

示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

解题思路1:

最简单的方法当然是使用栈来存储链表上的一个个节点,再出栈将节点连接起来即可;

代码1:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(!head)
            return nullptr;
        stack<ListNode *> tempStack;
        ListNode * res;
        while(head)
        {
            tempStack.push(head);
            head = head->next;
        }
        res = tempStack.top();
        tempStack.pop();
        ListNode *p = res;
        while(!tempStack.empty())
        {
            p->next = tempStack.top();
            tempStack.pop();
            p=p->next;
        }
        p->next = nullptr;
        return res;
    }
};

解题思路2: 迭代

遍历链表,将当前节点的next指向前一个元素,但要注意用一个临时节点保存当前节点的下一个节点;

代码2:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode * prev = nullptr;
        ListNode * curr = head;
        while(curr)
        {
            ListNode * nextTemp = curr->next;
            curr->next = prev;
            prev = curr;
            curr = nextTemp;
        }
        return prev;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 解题思路 要让1指向null,接着2指向1,3指向2,依次得到结果。定义cur节点指向链表的第一个节点,...
    dreamintime阅读 560评论 0 0
  • 代码GitHub地址 链表概述 数组和链表都是线性存储结构的基础实现,栈和队列都是线性存储结构的应用 数组优缺点 ...
    HikariCP阅读 1,488评论 0 0
  • 反转一个单链表。 示例: 进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 代码
    8239e604d437阅读 182评论 0 0
  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,635评论 1 45
  • 时光如箭,岁月如梭,转眼到了12月底了,2017年就这么匆匆结束了,感觉很多的事情都没来得及做,时间就这么溜走了。...
    冉冉2019阅读 19,538评论 0 1