題目鏈結
題目的要求:要求使用原地演算法,不能改變節點內部的值,需要對實際的節點進行交換。
這道題最後的結果將 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先遍歷樹,構建乙個無向圖 後序遍歷更新樹...