题解 | #删除链表的倒数第n个节点#

删除链表的倒数第n个节点

https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

无脑解法:避免链表只有一个节点,在链表末尾增加一个节点,然后反转,删除第n个节点,再反转

 /**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */
class Solution {
public:
    /**
     *
     * @param head ListNode类
     * @param n int整型
     * @return ListNode类
     */
    ListNode* reverseLink(ListNode* head) {
        if (head == NULL)
            return NULL;
        ListNode* cur = head;
        ListNode* pre = NULL;
        while (cur != NULL) {
            ListNode* temp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* iter = head;
        while (iter->next != NULL) {
            iter = iter->next;
        }
        ListNode* v1 = new ListNode(-1);
        iter->next = v1;
        ListNode* rev = reverseLink(head);
        ListNode* pre = rev;
        ListNode* cur = rev->next;
        for (int i = 0; i < n - 1; i++) {
            pre = pre->next;
            cur = cur->next;
        }
        pre->next = cur->next;
        return reverseLink(rev->next);
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-25 17:46
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务