給定一個鏈表,刪除鏈表的倒數第 _n _個節點,而且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.node
/** * 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 temp=head; //找到要刪除的節點判斷條件 ListNode cur=head; //要刪除節點的前置節點 ListNode pre=null; //記錄何時雙節點開始同時移動 int pos=1; while(cur.next!=null){ //當n比cur節點的位置座標小時(從1開始計數),要刪除的節點指針開始移動。等cur節點的下個節點爲空時,指針2恰好找到刪除節點。 if(pos>=n){ pre=temp; temp=temp.next; } pos++; cur=cur.next; } if(pre==null){ //當刪除的是第一個節點時,直接返回第二個節點便可 return head.next; } //不然刪除temp節點 pre.next=temp.next; return head; } }