Decription:
Given a linked list, remove the n-th node from the end of list and return its head.
My solution:
超时了
就是贼蠢,算出链表的长度,得出删除元素的位置,删去元素
ListNode* removeNthFromEnd(ListNode* head, int n) {
int i=1; //计数
while(head->next)
i++;
int j=i-n;
if(j==0||(i==2&&j==1))
{
head=head->next;
return head->next;
}
else
{
ListNode* head1=head;
for(int k=0;k<j-1;k++)
{
if(k==j-2)
{
head1->next=head1->next->next;
}
else
head1=head1->next;
}
return head;
}
}
让我来品一品好的解法。
solution2
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head||head->next==NULL) //判断链表是否为空
return NULL;
ListNode start(-1);
start.next=head;
ListNode* fast=&start;
ListNode* slow=&start;
for(int i=0;i<n;i++)
fast=fast->next;
while(fast->next)
{
fast=fast->next;
slow=slow->next;
}
slow->next=slow->next->next;
return start.next;
}
这段代码首先用一个fast和一个slow两者相距N的方式很优秀。
其次,这个结构体定义里面一个是对象指针一个单纯的指针,复习了一下对象指针,这都忘了,我也是很优秀了。
坚持第三天。
加油。