您好,登錄后才能下訂單哦!
小編給大家分享一下leetcode中如何刪除鏈表的倒數第N個節點,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
給定一個鏈表,刪除鏈表的倒數第 n 個節點,并且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點后,鏈表變為 1->2->3->5.
說明:
給定的 n
保證是有效的。
進階:
你能嘗試使用一趟掃描實現嗎?
標簽:鏈表
整體思路是讓前面的指針先移動n
步,之后前后指針共同移動直到前面的指針到尾部為止
首先設立預先指針pre,預先指針是一個小技巧,在第2題中進行了講解
設預先指針pre
的下一個節點指向head
,設前指針為start
,后指針為end
,二者都等于pre
start
先向前移動n步
之后start
和end
共同向前移動,此時二者的距離為n
,當start
到尾部時,end
的位置恰好為倒數第n
個節點
因為要刪除該節點,所以要移動到該節點的前一個才能刪除,所以循環結束條件為start.next != null
刪除后返回pre.next
,為什么不直接返回head
呢,因為head
有可能是被刪掉的點
時間復雜度:O(n)
/** * 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 pre = new ListNode(0); pre.next = head; ListNode start = pre, end = pre; while(n != 0) { start = start.next; n--; } while(start.next != null) { start = start.next; end = end.next; } end.next = end.next.next; return pre.next; }}
以上是“leetcode中如何刪除鏈表的倒數第N個節點”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。