知乎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; } }
微信掃碼關注更多題解!