leecode刷題(21)-- 刪除鏈表的倒數第N個節點
阿新 • • 發佈:2019-02-26
from 鏈表 nth nod 刪除鏈表 mov 頭結點 移動 lin
leecode刷題(21)-- 刪除鏈表的倒數第N個節點
刪除鏈表的倒數第N個節點
描述:
給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鏈表變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
思路:
這道題我們可以采用雙指針法來解答。定義兩個指針 left 和 right, 都讓其指向鏈表的頭節點。先讓 right 指針向後移動 n 步,然後 left 指針和 right 一起向後移動,當 right 的 next 指針為 NULL 時,left 指針即指向了要刪除節點的前一個節點,接著讓 left 的 next 指針指向要刪除節點的下一個節點即可。這裏我們需要註意的是,如果要刪除的節點剛好是頭節點,那麽 right 指針向後移動結束時就會為 NULL,所以加一個判斷其是否為 NULL 的條件,若為 NULL 則返回頭節點的 next 指針。
代碼如下:
/** * 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 left = head; ListNode right = head; for(int i = 0; i < n; i++) { right = right.next; } if(right == null) { return head.next; } while(right.next != null) { left = left.next; right = right.next; } left.next = left.next.next; return head; } }
leecode刷題(21)-- 刪除鏈表的倒數第N個節點