原题链接
两次遍历(c++):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
int size=0;
ListNode* dummy=new ListNode(0);//设置哑结点
dummy->next=head;
ListNode* tmp=head;
//计算链表长度
while(tmp!=NULL)
{
tmp=tmp->next;
size++;
}
size=size-n;
tmp=dummy;
while(size--)
tmp=tmp->next;
//删除链表节点
tmp->next=tmp->next->next;
return dummy->next;
}
};
一次遍历,双指针(c++)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
int size=0;
ListNode* dummy=new ListNode(0);//设置哑结点
dummy->next=head;
ListNode* first=dummy;
ListNode* second=dummy;
for(int i=0;i<n+1;i++)
first=first->next;
while(first!=NULL)
{
first=first->next;//两个指针同时移动,保持固定距离
second=second->next;
}
second->next=second->next->next;
return dummy->next;
}
};
遇到的问题:
Line 14: Char 20: runtime error: member access within null pointer of type ‘struct ListNode’ (solution.cpp)
解决办法:
遇到问题 | 解决办法 |
---|---|
runtime error: member access within null pointer of type ‘struct ListNode’ (solution.cpp) | ListNode* dummy-------》ListNode* dummy=new ListNode(0);,表明这个指针不是空指针 |