19. Remove Nth Node From End of List
Difficulty: Easy
Given a linked list, remove the nth node from the end of list and return its head.
For example, Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5. Note: Given n will always be valid. Try to do this in one pass.
给定一个链表,移除从链表结尾起的第n个结点,返回头结点。
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* removeNthFromEnd(struct ListNode* head,int n) {
int m,listlen=0;
struct ListNode* node;
if(head==NULL)
return head;
node=head;
while(node!=NULL) //链表长度
{
listlen++;
node=node->next;
}
m=listlen-n+1; //移除链表起始的第m个
if(m==1)
{
return head->next;
}
node=head;
while(m>2)
{
node=node->next;
m--;
}
node->next=node->next->next;
return head;
}