这是一道很简单的链表题目,却让我开始反省自己对于c++的掌握程度。
题目链接:https://leetcode-cn.com/leetbook/read/linked-list/f58sg/
下面是c艹代码,一直报错却找不到报错的原因。以及关于改算法是否正确,特意去参考了408上是怎么写的,发现无误后依旧在力扣上面报错,开始怀疑人生。
#include <bits/stdc++.h>
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
// ASAN_OPTIONS=alloc_dealloc_mismatch=0;
if(!head || !head->next){
return head;
}
ListNode *newHead = (ListNode*)malloc(sizeof(ListNode));
newHead->next = NULL;
while(head!=NULL){
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->next = newHead->next;
newHead->next = newNode;
newNode->val = head->val;
head = head->next;
}
return newHead->next;
}
};
下面是同样的算法,我用c进行实现。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
if(!head || !head->next){
return head;
}
struct ListNode *newList = (struct ListNode*)malloc(sizeof(struct ListNode));
newList->next = NULL;
while(head){
struct ListNode *newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->next = newList->next;
newList->next = newNode;
newNode->val = head->val;
head = head->next;
}
return newList->next;
}
c一次就过。
开始反思为什么会出现这种情况?排除掉了空指针的情况,也不存在head==null而没有记性特判的情况。
于是得出一个结论:人生苦短,我用python。