【链表】删除链表的倒数第n个节点_链表

思路:为了保持删除头结点和其他节点操作一致,引入虚拟头结点duumyNode。

假设链表长度为len,删除倒数第n个节点就是删除第len-n+1个节点,删除链表节点需要使用待删除节点 的前驱节点,所以p从虚拟头结点开始走len-n步,然后执行p.next=p.next.next即可

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    public ListNode removeNthFromEnd (ListNode head, int n) {
        // write code here
        if(head==null)return null;
        ListNode dummyNode=new ListNode(0);
        dummyNode.next=head;
        int len=length(head);
        int step=len-n;
        ListNode p=dummyNode;
        for(int i=0;i<step;i++){
            p=p.next;
        }
        p.next=p.next.next;
        return dummyNode.next;
        
    }
    int length(ListNode pHead){
        if(pHead==null)return 0;
        int len=0;
        ListNode p=pHead;
        while(p!=null){
            p=p.next;
            len++;
        }
        return len;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.