讨论
ListNode* sentinel=new ListNode(0);与
ListNode a;
a=(ListNode)malloc(sizeof(ListNode));
的区别。
康康代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* sentinel=new ListNode(0);
sentinel->next = head;
ListNode *prev = sentinel, *curr = head;
while (curr != nullptr) {
if (curr->val == val) {
prev->next = curr->next;
} else prev = curr;
curr = curr->next;
}
ListNode *ret = sentinel->next;
delete sentinel;
return ret;
}
};
这是cpp运行的,在声明sentinel 的时候用到了new运算符,如果使用c的malloc函数来创造空间会出现问题。
这里是大佬的具体描述
如果用c的环境来运行malloc,是可行的。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *sentinel;
sentinel =(struct ListNode*)malloc(sizeof(struct ListNode));
sentinel->next =head;
struct ListNode *curr=sentinel,*prev=head;
while(prev!=NULL){
if(prev->val==val)
{
curr->next=prev->next;
}else curr=prev;
prev=prev->next;
}
struct ListNode *ret = sentinel->next;
free(sentinel);
return ret;
}
最后还是俺对这两门语言不熟,导致出现了这样的问题。所以cpp用new c用malloc就好了。