乐趣区

LeetCode之删除倒数第N个节点

删除链表的倒数第 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;
    }
}
退出移动版