1. 程式人生 > >19 Remove Nth Node From End of List

19 Remove Nth Node From End of List

別想花裡胡哨的了。。倒置刪除再倒置吧,複雜度也就n,就是程式碼長了點

/**
 * 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) {
	ListNode *p = head;
ListNode *firstNode = new ListNode(p->val); p = p->next; ListNode *temp; //Reverse while (p) { temp = new ListNode(p->val); temp->next = firstNode; firstNode = temp; ListNode *d = p; p = p->next; delete d; } //Remove p = firstNode; if (n == 1)firstNode = firstNode-
>next; else { while (n - 2) { --n; p = p->next; } if(p->next->next)p->next = p->next->next; else p->next = NULL; } //Reverse p = firstNode; if(p)head = new ListNode(p->val); else return p; p = p->next; while (p) { temp = new ListNode(p->val); temp-
>next = head; head = temp; ListNode* d = p; p = p->next; delete d; } return head; } };