LeetCode——remove n-th node from end of list

    技术2022-07-11  88

    题目描述:

    给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.↵↵ 删除了链表的倒数第n个节点之后,链表变为1->2->3->5. 备注: 题目保证n一定是合法的 请尝试只用一步操作完成该功能

    解题思路:

    删除链表倒数第n个节点,关键是找到该节点且尽量使用较少的循环。 可以使用两个指针,一个指针先走n步,另一个指针才开始同步走,这样当快指针到达链表尾部的时候,慢指针也刚好指到要删除节点的上一个节点。

    /** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ ListNode* removeNthFromEnd(ListNode* head, int n) { if(head==NULL)return head; ListNode* fast=head; ListNode* low=head; ListNode* tmp=NULL; for(int i=0;i<n;i++){ fast=fast->next; } if(fast==NULL){ //考虑如果要删除的是头节点,可直接返回head->next. tmp=head->next; delete head; return tmp; } if(fast!=NULL){ while(fast->next!=NULL){ fast=fast->next; low=low->next; } //tmp=low->next; low->next=low->next->next; //delete tmp; return head; } } };

    【莫慌】

    Processed: 0.020, SQL: 9