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.
?
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if (head==NULL || n<=0) { return NULL; } ListNode* pre = NULL; ListNode* pHead = head; ListNode* pBehind = head; for (int i = 0; i < n-1; i++) { if (pHead->next != NULL) { pHead = pHead->next; } else { return NULL; } } while (pHead->next != NULL) { pre = pBehind; pHead = pHead->next; pBehind = pBehind->next; } if (pre == NULL) { head = pBehind->next; delete pBehind; } else { pre->next = pBehind->next; delete pBehind; } return head; } };
?
Remove Nth Node From End of List
原文:http://hcx2013.iteye.com/blog/2215864