码迷,mamicode.com
首页 > 其他好文 > 详细

19. 删除链表的倒数第N个节点

时间:2020-03-02 22:47:07      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:info   语言   inf   img   ||   java   problems   div   返回   

19. 删除链表的倒数第N个节点

1、题目介绍

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

技术图片

试题链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

2、java

2.1、遍历两次

    public static ListNode removeNthFromEnd(ListNode head, int n) {
        if(head == null || head.next == null) return null;
        //求链表长度
        ListNode p = head;
        int size = 0;
        while (p != null)  {
            size++;
            p = p.next;
        }

        if(n == size) return head.next;

        p = head;
        for(int i = 2;i <= size - n;i++ ) {
            p = p.next;
        }

        p.next = p.next.next;

        return head;
    }

测试结果:

技术图片

2.1、遍历一次

    public static ListNode removeNthFromEnd(ListNode head, int n) {
        if(head == null || head.next == null) return null;
        //求链表长度
        ListNode p = head;
        int flag = 0;
        while (p != null && p.next != null) {
            ListNode temp = p.next;
            for(int i = 0;i < n;i++) {
                if(temp == null) {
                    flag = 1;
                    break;
                }
                temp = temp.next;
            }
            if(flag == 1) {
                return head.next;
            }
            if(temp != null) {
                p = p.next;
            }else {
                p.next = p.next.next;
                return head;
            }
        }
        return head;
    }

测试结果:

技术图片

3、C语言

3.1、遍历两次

struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    if(head == NULL || head->next == NULL) return NULL;
    //求链表长度
    struct ListNode* p = head;
    int size = 0;
    while (p != NULL)  {
        size++;
        p = p->next;
    }

    if(n == size) return head->next;

    p = head;
    for(int i = 2;i <= size - n;i++ ) {
        p = p->next;
    }

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

    return head;
}

测试结果:

技术图片

3.1、遍历一次

struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    if(head == NULL || head->next == NULL) return NULL;
    //求链表长度
    struct ListNode* p = head;
    int flag = 0;
    while (p != NULL && p->next != NULL) {
        struct ListNode* temp = p->next;
        for(int i = 0;i < n;i++) {
            if(temp == NULL) {
                flag = 1;
                break;
            }
            temp = temp->next;
        }
        if(flag == 1) {
            return head->next;
        }
        if(temp != NULL) {
            p = p->next;
        }else {
            p->next = p->next->next;
            return head;
        }
    }
    return head;
}

测试结果:

技术图片

19. 删除链表的倒数第N个节点

标签:info   语言   inf   img   ||   java   problems   div   返回   

原文地址:https://www.cnblogs.com/xgp123/p/12398126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!