删除链表的倒数第 N 个节点
给定一个链表,删除链表的倒数第 _n _个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {val = x;}
* }
*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {
// 要删除的节点
ListNode temp=head;
// 找到要删除的节点判断条件
ListNode cur=head;
// 要删除节点的前置节点
ListNode pre=null;
// 记录什么时候双节点开始同时移动
int pos=1;
while(cur.next!=null){
// 当 n 比 cur 节点的位置坐标小时(从 1 开始计数),要删除的节点指针开始移动。等 cur 节点的下个节点为空时,指针 2 刚好找到删除节点。if(pos>=n){
pre=temp;
temp=temp.next;
}
pos++;
cur=cur.next;
}
if(pre==null){
// 当删除的是第一个节点时,直接返回第二个节点即可
return head.next;
}
// 否则删除 temp 节点
pre.next=temp.next;
return head;
}
}