知乎ID: 码蹄疾
码蹄疾,毕业于哈尔滨工业大学。
小米广告第三代广告引擎的设计者、开发者;
担任小米运用市肆、日历、开屏广告业务线研发;
主导小米广告引擎多个模块重构;
关注引荐、搜刮、广告范畴相干学问;
问题
给定一个链表,删除链表的倒数第 n 个节点,而且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变成 1->2->3->5.
申明:
给定的 n 保证是有用的。
进阶:
你能尝试运用一趟扫描完成吗?
剖析
链表的问题基本上都是优先斟酌双指针。一个指针先走N步,然后两个指针同步移动到链表末端,移除前一个指针所指着的节点即可。然则越简朴的问题越要斟酌边界条件,不要掉坑内里,详细看代码吧,争夺一次Bugfree.
Code
/**
* 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 right = head;
ListNode left = head;
for (int i = 0; i < n; i++) {
right = right.next;
}
if (right == null) {
head = head.next;
return head;
}
while (right.next != null) {
left = left.next;
right = right.next;
}
left.next = left.next.next;
return head;
}
}
微信扫码关注更多题解!