Remove Nth Node From End of List

描述:

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.

分析:

设两个指针p,q,让q先走n步,然后p和q一起走,直到q走到尾节点,删除p->next即可。

代码:

class Solution {

public:

  ListNode *removeNthFromEnd(ListNode *head, int n) {

    ListNode dummy(-1);

    dummy.next = head;

    ListNode *p = &dummy, *q = &dummy;

    for (int i = 0; i < n; i++) {  //q先走n步

      q = q->next;

    }

    while (q->next) {  //一起走

      p = p->next;

      q = q->next;

    }

    ListNode *tmp = p->next;

    p->next = p->next->next;

    delete tmp;

    return dummy.next;

  }

}; 

posted @ 2017-12-15 09:40  飘舞的雪  阅读(147)  评论(0编辑  收藏  举报