zoukankan      html  css  js  c++  java
  • 面试题24:反转链表(C++)

    题目地址:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/

    题目描述

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

    题目示例

    示例:

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

    解题思路

    双指针:使用双指针pre和cur,分别表示当前节点的前一个结点和当前遍历的节点。具体操作定义临时指针tmp,用于存放当前指针cur所指的下一节点,即tmp = cur->next,然后让当前指针cur指向pre,再将cur的值交予pre,最后,将tmp赋值给cur,进行下一轮操作,直到cur到链表尾部。

    递归:使用递归函数递归到链表的最后一个节点,将该节点作为反转后链表的头节点,然后,在每次函数返回过程中,让当前节点的下一节点的next指向当前节点,同时,让当前节点的next指向空,从而实现链表的反转操作。

    参考文章:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/solution/fan-zhuan-lian-biao-yi-dong-de-shuang-zhi-zhen-jia/

    程序源码

    双指针

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* reverseList(ListNode* head) {
            if(head == NULL) return head; //空链表
            ListNode* pre = nullptr;
            ListNode* cur = head;
            while(cur != nullptr)
            {
                ListNode* tmp = cur->next;
                cur->next = pre;
                pre = cur;
                cur = tmp;
            }
            return pre;
        }
    };

    递归

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* reverseList(ListNode* head) {
           if(head == NULL || head->next == NULL) return head;
           ListNode* rev = reverseList(head->next);
           head->next->next = head;
           head->next = NULL;
           return rev;
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    callback的实现
    TypeId和IidManager关系
    Blocks的实现
    定义返回Block的函数
    NSString与奇怪的retainCount
    ARC下的所有权修饰符
    MAC安装MYSQL
    找出数组中只出现一次的数
    写在复习MVC后
    UITableViewHeaderFooterView的封装
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12536744.html
Copyright © 2011-2022 走看看