LeetCode-19刪除鏈表的倒數第n個結點

LeetCode-19刪除鏈表的倒數第n個結點

來自專欄 LeetCode刷題指南1 人贊了文章

使用兩個工作指針p1,p2,p1指向頭結點,p2指向順數第n+1個節點,p1,p2同時後移,當p2移動到末尾時,p1指向倒數第n+1個節點

(單鏈表:刪除倒數第n個節點,則需指針記錄倒數第n+1個節點)

java代碼:

/** * 使用兩個工作指針p1,p2 * p1指向頭結點,p2指向順數第n+1個節點 * p1,p2同時後移,當p2移動到末尾時,p1指向倒數第n+1個節點 * (單鏈表:刪除倒數第n個節點,則需指針記錄倒數第n+1個節點) * * */public ListNode removeNthFromEnd(ListNode head, int n) { ListNode p1, p2; p1 = p2 = head; //p2移動到順數第n+1個節點 for(int index = 0; index < n; index++) p2 = p2.next; //判斷p2是否移動到鏈表末尾,即n等於鏈表長度的情況 if(null == p2){ head = head.next; return head; } //p1,p2同時後移 while(null != p2.next){ p1 = p1.next; p2 = p2.next; } //刪除倒數第n個結點 p1.next = p1.next.next; return head;}

推薦閱讀:

公元後日期的紀日干支計、星期和二十八宿演算法
【轉載】納音金命自演算法
干支紀年計演算法
機器學習中的EM演算法
[面試]找到一個元素,可以將數組分成兩個乘積相等的子數組

TAG:數據結構 | 鏈表 | 演算法 |