力扣链接
19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)
题目描述
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
解题思路
先遍历链表记录链表长度,然后减去n就是从前往后遍历到要删除的结点的距离,然后设置l1指向head前一个结点,l2指向head,向后遍历到l1指向要删除结点的前一个结点,l2指向要删除的结点,将l1的结点next指向l2后一个结点,完成删除操作(如果head指向要删除的结点,则将head指向要删除结点的后一个结点。
解题代码
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy=new ListNode(0);
dummy.next=head;
int length=1;
while(head.next!=null){
head=head.next;
length++;
}
head=dummy.next;//head回归原来的位置
int prelength=length-n;//计算要后移的距离
ListNode l1=dummy;
ListNode l2=head;
for(int i=0;i<prelength;i++){
l1=l1.next;
l2=l2.next;
}
l1.next=l2.next;//删除操作
if(head==l2) head=l2.next;//当head指向要删除的结点,将head后移
return head;
}
}