剑指 Offer 24. 反转链表

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

  示例:

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

===============================================================

其实这个就是一个简单的头插法,找到最后一个元素,之后把最后一个元素当作头节点,遍历之前的链表,进行头插,上代码:

复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (!head)
            return NULL;
        ListNode *end = head;
        while (end->next)
            end = end->next;
        ListNode *h = end;
        while (head != h) {
            ListNode *newNode = head;
            head = head->next;
            newNode->next = end->next;
            end->next = newNode;
        }

        return end;
    }
};有没有大神可以指点一下,请留言
复制代码

报错信息:

Char 16: runtime error: member access within misaligned address 0xbebebebebebebebe, which requires 8 byte alignment (__ListNodeUtils__.cpp

代码如下:

复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *end = (ListNode*)malloc(sizeof(ListNode));
        while (head) {
            ListNode *newNode = head;
            head = head->next;
            newNode->next = end->next;
            end->next = newNode;
        }

        return end->next;
    }
};
复制代码

后来在一篇博客里看到解决办法,现有如下结构体:

struct ListNode {  
    int val;  
    struct ListNode *next;   
};

在申请空间时代码如下:

struct ListNode * temp1=(struct ListNode*)malloc(sizeof(struct ListNode));

由于结构体内存在next指针,而申请结构体空间后同时定义了next指针,此时next指针未指向任何空间,故在测试时可能导致上述错误。

解决方法为:

增加代码使next指针指向空。

temp1->next=NULL;

成功解决,后面看题解中的其他的解法,看到了一个递归,真的牛!!!太简洁了,第一眼我没看懂,后面才揣摩明白,代码如下:

复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (head == NULL || head->next == NULL) {
            return head;
        }
        ListNode* ret = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return ret;
    }
};
复制代码

 

posted on   4小旧  阅读(71)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示