美文网首页
【LeetCode】反转链表

【LeetCode】反转链表

作者: MyyyZzz | 来源:发表于2019-04-23 11:00 被阅读0次

    题目描述:

    反转一个单链表。

    示例:
    输入: 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;
        }
    };
    

    相关文章

      网友评论

          本文标题:【LeetCode】反转链表

          本文链接:https://www.haomeiwen.com/subject/zexugqtx.html