首页 > 其他分享 >力扣---19. 删除链表的倒数第 N 个结点

力扣---19. 删除链表的倒数第 N 个结点

时间:2023-02-20 11:33:18浏览次数:34  
标签:--- head ListNode 删除 19 list next 链表

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

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

对链表进行删除操作,可以通过将被删除点的next指针直接指向被删除点的后一个节点来完成。

由于需要删除倒数第n个,所以需要知道链表长度。

第一次遍历获得链表长度,知道需要删除的点在哪个位置,第二次遍历进行删除操作即可。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode list = head;
        // 遍历链表,获得链表长度。
        int len = 0;
        while (list != null) {
            len ++;
            list = list.next;
        }
        // 长度等于n时,直接删除头结点即可。
        if (len == n) {
            return head.next;
        }
        len = len - n;
        list = head;
        // len - 1 即是倒数第n个的前一个节点。
        for (int i = 0; i < len - 1; i ++) {
            list = list.next;
        }
        // list 下一个节点赋为下一个节点的下一个节点,即跳过了list的下一个节点,即删除。
        list.next = list.next.next;
        return head;
    }
}

 

 

标签:---,head,ListNode,删除,19,list,next,链表
From: https://www.cnblogs.com/allWu/p/17136720.html

相关文章