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

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12689658.html

删除链表的第N个节点(34min)

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

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:

给定的 n 保证是有效的。

题解:

         思路:

                  1)先求出链表的长度。

                  2)再次循环链表,当循环到链表长度减去n的长度时,把指针的next指向next的next.

        注意:当第一次循环链表的长度时,是判断指针是不是null,而不是指针的next是不是空。

代码如下:

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        int count=0;
        ListNode p=head;
        ListNode q=head;
        while(p!=null)
        {
            p=p.next;
            count++;
        }
        
        int k=count-n;
        if(k==0)
        return head.next;
        for(int i=1;i<k;i++)
           q=q.next;
         q.next=q.next.next;
           
        
        return head;

    }
}

 

posted @ 2020-04-13 10:10  萍2樱释  阅读(116)  评论(0编辑  收藏  举报