双向链表删除节点时间复杂度_「十分钟学算法」删除链表的倒数第N个节点
生活随笔
收集整理的這篇文章主要介紹了
双向链表删除节点时间复杂度_「十分钟学算法」删除链表的倒数第N个节点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個鏈表,刪除鏈表的倒數第 n 個節點,并且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.當刪除了倒數第二個節點后,鏈表變為 1->2->3->5.說明:
給定的 n 保證是有效的。
題解:
我們可以使用兩個指針而不是一個指針。第一個指針從列表的開頭向前移動 n+1n+1 步,而第二個指針將從列表的開頭出發。現在,這兩個指針被 nn 個結點分開。我們通過同時移動兩個指針向前來保持這個恒定的間隔,直到第一個指針到達最后一個結點。此時第二個指針將指向從最后一個結點數起的第 nn 個結點。我們重新鏈接第二個指針所引用的結點的 next 指針指向該結點的下下個結點。
刪除鏈表的倒數第 N 個元素
public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0); dummy.next = head; ListNode first = dummy; ListNode second = dummy; // Advances first pointer so that the gap between first and second is n nodes apart for (int i = 1; i <= n + 1; i++) { first = first.next; } // Move first to the end, maintaining the gap while (first != null) { first = first.next; second = second.next; } second.next = second.next.next; return dummy.next;}復雜度分析
時間復雜度:O(L)O(L),該算法對含有 LL 個結點的列表進行了一次遍歷。因此時間復雜度為 O(L)O(L)。
空間復雜度:O(1)O(1),我們只用了常量級的額外空間。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的双向链表删除节点时间复杂度_「十分钟学算法」删除链表的倒数第N个节点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑声音控制在那(电脑声音控制面板在哪)
- 下一篇: 张家港几线城市