剑指 Offer II 021. 删除链表的倒数第 n 个结点


一、题目信息

解题思路: 双指针,一个left,一个right。都把他们初始化到链表的头结点,先让right走n+1步,如果走完之后right为空了,直接返回head.next。接下来让left从head开始走,right继续走,直到right为空,这时left和right中间的就是需要删除的节点,让left.next=left.next.next即可。

图解 1、假设n=2,需要删除链表的倒数第二个节点,就是4这个节点。 2、先让right向前走n+1步

3、left和right一起走,直到right走到空为止 4、left.next=lefe.next.next;

实现代码

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

其他题目分享

经验分享 程序员 微信小程序 职场和发展