[Leetcode] #19 Remove Nth Node From End of List

来源:互联网 发布:淘宝图书商城 编辑:程序博客网 时间:2024/06/18 15:06

Discription:

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.

Solution:

ListNode* removeNthFromEnd(ListNode* head, int n) {if (head == NULL) return NULL;ListNode *p1 = head, *pPre = NULL;ListNode *p2 = head;for (int i = 0; i < n - 1; i++)  p2 = p2->next;while (p2->next){pPre = p1;p1 = p1->next;p2 = p2->next;}if (pPre == NULL){head = p1->next;delete p1;}else{pPre->next = p1->next;delete p1;}return head;}
ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode *prehead = new ListNode(-1), *cur1 = prehead, *cur2 = prehead;prehead->next = head;for (int i = 0; i < n; i++){cur2 = cur2->next;}while (cur2->next){cur2 = cur2->next;cur1 = cur1->next;}ListNode *temp = cur1->next;cur1->next = cur1->next->next;delete temp;return prehead->next;}
0 0