牛客題霸 名企高頻面試題 重排鍊錶

2021-10-09 03:28:40 字數 1772 閱讀 3299

題目鏈結

題目的要求:要求使用原地演算法,不能改變節點內部的值,需要對實際的節點進行交換。

這道題最後的結果將 l1—>l2—>l3---->ln變為

l1 ----> ln---->l2---->ln-1-------->

我們不難想到我們可以將序列分為兩個部分:

第一步:

第二步:

第三步:

解決思路:

第一步利用快慢指標將鍊錶分為兩個部分

第二步將後半部分鍊錶反轉

第三步將反轉後的鍊錶插入前半部分鍊錶

第一步:當快指標走到最後的時候慢指標剛好走到鍊錶中間的位置

//此為反轉鍊錶和插入鍊錶的操作

taillist =

reverse

(taillist)

;insert

(headlist,taillist)

;}第二步:反轉鍊錶

沒什麼好解釋的,利用迭代實現的;

public  listnode reverse

(listnode head)

return dummy.next;

}

第三步:具體細節可以看**注釋

public

void

insert

(listnode list1,listnode list2)

}

完整**

/**

* definition for singly-linked list.

* class listnode

* }*/public

class

solution

listnode slow = head;

listnode fast = head;

while

(fast != null && fast.next != null)

listnode headlist = head;

listnode taillist = slow.next;

slow.next = null;

//此為反轉鍊錶和插入鍊錶的操作

taillist =

reverse

(taillist)

;insert

(headlist,taillist);}

public listnode reverse

(listnode head)

return dummy.next;

}public

void

insert

(listnode list1,listnode list2)

}}

牛客網 高頻面試題 鍊錶中環的入口節點

鍊錶中環的入口節點 牛客題霸 牛客網 題目描述 對於乙個給定的鍊錶,返回環的入口節點,如果沒有環,返回null 拓展 你能給出不利用額外空間的解法麼?如下圖所示,x,y,z分別為鍊錶起始位置,環開始位置和兩指標相遇位置,則根據快指標速度為慢指標速度的兩倍,可以得出 2 a b a b n b c 即...

牛客網刷題 重排鍊錶

將給定的單鏈表 l l0 l1 l ln 重新排序為 l0 ln l1 l l2 l l 要求使用原地演算法,不能改變節點內部的值,需要對實際的節點進行交換。輸入 輸出 線性表 因為鍊錶沒有下表,我們可以現將鍊錶遍歷一遍,儲存到線性表中,然後再重排序 鍊錶中點 鍊錶逆序 合併鍊錶 先查詢鍊錶的中點,...

牛客網 高頻面試題 樹的直徑

樹的直徑 牛客網 題目描述 給定一棵樹,求出這棵樹的直徑,即樹上最遠兩點的距離。示例1的樹如下圖所示。其中4到5之間的路徑最長,是樹的直徑,距離為5 2 4 11 示例1輸入 複製6,0,1 1,5 1,2 2,3 2,4 3,4,2,1,5 返回值複製 11先遍歷樹,構建乙個無向圖 後序遍歷更新樹...