LeetCode刷题之T19删除链表的倒数第N个节点(中等)

这次讲解的题目是LeetCode的T19 删除链表的倒数第N个节点(中等),话不多说,接下来上题目:
在这里插入图片描述
链表节点的定义:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */

这是一道较简单的题目,只要了解链表的数据结构就能想到解决的办法。
解题思路:设置先遍历链表,得到链表的长度,再对该链表进行修改。如下如所示:
在这里插入图片描述
我们可以看到,要对倒数第二个进行删除,那么我们就要对index为sum-n-1的节点的next进行修改,让 节点.next=节点.next.next;
接下来上代码:

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        //判空操作
        if(head==null||head.next==null)
        return null;
        //定义两个指针,point用来操作链表,gethead用来表示对头结点的引用
        ListNode point=head;
        ListNode gethead=head;
        int sum=0;//用来计算链表长度
        //计算长度
        while(head!=null){
            sum++;
            head=head.next;
        }

        int index=0; //计算当前遍历到第几个
 
        //排除特殊情况,当sum=n的时候!
        if(sum-n-1<0){
            return gethead.next;
        }
         
         //通过point指针对链表进行操作
        for(int i=0;i<sum;i++){
            if(index==sum-n-1){
                //修改next 达到删除的目的
                point.next=point.next.next;
                break;
            }
            index++;
            point=point.next;
        }
        return gethead;
    }
}

代码如上,有两点需要注意!
一:记得进行判空的操作。
二:当sum和n的值相等,即链表长度和删除倒数第n个,这两个值相等的时候sum-n-1会小于0,故不会进行next的修改操作,需要单独拿出来讨论!
以上就是本次题目的讲解,如果有不对的地方,欢迎大家指出,谢谢!

猜你喜欢

转载自blog.csdn.net/Pzzzz_wwy/article/details/105670943
今日推荐