19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
/** * @author :xxx * @description:TODO * @date :2020/10/18 16:29 */ public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next){ this.val = val; this.next = next; } } class Solutions { //获取链表的长度 public int getLength(ListNode head) { int len = 0; while (head != null) { len++; head = head.next; } return len; } public ListNode removeNthFromEnd(ListNode head, int n) { ListNode temp = new ListNode(0, head); ListNode cur = temp; int len = getLength(head); // System.out.println("链表的长度为"+len); for (int i = 0; i < len - n ; i++) {//此处n的长度为个坑 cur = cur.next; // System.out.println("cur的内容:"+cur.val); } cur.next = cur.next.next; return temp.next; } public static void main(String[] args) { ListNode a = new ListNode(1); ListNode b = a; for (int i = 2; i <= 5; i++) { b.next = new ListNode(i); b = b.next; } // ListNode c = a; // while (c != null) { // System.out.println(c.val); // c = c.next; // } Solutions s1 = new Solutions(); ListNode l = s1.removeNthFromEnd(a, 2); while (l!= null) { System.out.println(l.val); l = l.next; } } }

浙公网安备 33010602011771号