赞
踩
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
整体思路是让前面的指针先移动n步,之后前后指针共同移动直到前面的指针到尾部为止
可以使用两个指针,s (start) 、e(end)
因为第一个元素head可能是需要被删除的元素
所以,需要创建创建一个结点pre,pre的下一个节点为head
首先,先让 s 指针向后走n步,如果n.next != null,
就让s、e分别指向下一个元素
这个时候发现,e指向的元素就是该删除元素的前一个元素,
使用e.next = e.next.next可以删除需要删除的元素
最后返回pre.next
图片解释:
s向后走n步后的位置图
s、e最后的样子:
/** * 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 pre = new ListNode(0); pre.next = head; ListNode s = pre; ListNode e = pre; while(n != 0) { s = s.next; n--; } while (s.next != null) { s = s.next; e = e.next; } e.next = e.next.next; return pre.next; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。