给定一个链表,删除链表倒数第N个节点,并返回链表头结点。
如:给定链表1->2->3->4->5 以及n = 2,返回链表1->2->3->5。
思路:两个指针,相距n,当后一个指针到尾部时,p所指向的下个节点就是要删除的节点。
代码:
public class RemoveNthNodeFromEndOfList {
public ListNode removeNthFromEnd(ListNode head, int n) {
int i = 0;
ListNode q = head;
ListNode p = head;
while (i<n) {
q = q.next;
i++;
}
if(q == null) {
head = head.next;
return head;
}
while (q.next!=null) {
p = p.next;
q = q.next;
}
p.next = p.next.next;
return head;
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
ListNode tListNode = new RemoveNthNodeFromEndOfList().removeNthFromEnd(head, 1);
while (tListNode!=null) {
System.out.print(tListNode.val+" ");
tListNode = tListNode.next;
}
}
}
运行结果: