提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
提示:这里可以添加本文要记录的大概内容:
2月1日练习内容
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目-删除链表的倒数第 N 个结点
1.题目描述
给你一个链表,删除链表的倒数第 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.思路与代码
2.1 思路
1.先遍历链表获取链表的长度
2.找到需要删除的结点的前一个位置
3.删除结点
2.2 代码
代码如下(示例):
/**
* 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 q = head;
//删除位置
int length = getIength(head);
int end = length - n;
//如果删除位置为头结点
if(end == 0){
return head.next;
}
//找到倒数n - 1个结点
for(int i = 0;i < end - 1;i ++){
q = q.next;
}
//删除结点
q.next = q.next.next;
return head;
}
//获取链表长度
public int getIength(ListNode head){
int length = 0;
ListNode pre = head;
while(pre != null){
length ++;
pre = pre.next;
}
return length;
}
}
总结
提示:这里对文章进行总结: