找到連結串列的中間節點
問題和刪除倒數第k個節點類似,如果兩次遍歷很容易得到結果
這裡可以使用快慢指標的方法
p每次遍歷兩個節點,q每次遍歷一個節點
當p或者p的下一個節點為空時,q指向連結串列的中間節點
程式碼:
int midList(Node * head) {//快慢指標
Node * fast = head;
Node * slow = head;
while (fast&&fast->next) {
fast = fast->next->next;
slow = slow->next;
}
return slow->data;
}
執行結果
相關推薦
876 連結串列中間節點
ListNode* middleNode(ListNode* head) { ListNode* slow = head; ListNode* fast = head; while (fast != NULL && fast->next
連結串列面試題之快慢指標問題(一) 查詢連結串列中間節點
查詢連結串列中間節點 一.問題描述 給點一個連結串列,返回該連結串列的中間節點。 二.問題分析 假定一個連結串列中節點資料依次為(單數):1->2->3-&
資料結構之快慢指標查詢連結串列中間結點
單鏈表是一種十分常見和應用廣泛的資料結構,也是面試題經常會問到的一個。近期複習單鏈表,就將這個單鏈表常見的考點順便複習了一遍。 面試題:如何最快的獲取單鏈表的中間節點的位置? &nb
連結串列頭節點問題(指標作為引數傳遞不能為NULL)
真是腦殘,以前沒有注意過這個問題,今天噁心了我好一會。做個記錄,以後不要再犯。 這樣在main函式裡面定義一個指標變數然後傳進函式裡面在申請空間的做法是錯誤的。 void creat(node* head) { if(head==NULL){ head=(node*)mal
LeetCode382. 連結串列隨機節點————蓄水池抽樣演算法
//蓄水池抽樣 class Solution { private: ListNode * HEAD; public: //初始化 Solution(ListNode* head) { srand((unsigned)time(nullptr)); HEAD = hea
(CSDN遷移) 輸入一個連結串列,從尾到頭列印連結串列每個節點的值
題目描述 輸入一個連結串列,從尾到頭列印連結串列每個節點的值。 思路1. 翻轉連結串列,使用java自帶的翻轉函式或者從頭到尾依次改變連結串列的節點指標 /** * public class ListNode { * int val; * ListNode next =
劍指offer:刪除連結串列的節點---在O(1)時間內刪除連結串列節點
/** * 題目:(在O(1)時間內刪除連結串列節點) * 給定單鏈表的頭指標和節點指標,定義一個函式在O(1)時間內刪除節點。 * 解題思路: * 把下一個節點的內容複製到要刪除的節點上覆蓋原有的內容,再把下一個節點刪除。 *
LeetCode第24題:兩兩交換連結串列的節點(JAVA實現)
題目: 我的解答: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(i
Linked List Random Node 連結串列隨機節點
給定一個單鏈表,隨機選擇連結串列的一個節點,並返回相應的節點值。保證每個節點被選的概率一樣。 進階: 如果連結串列十分大且長度未知,如何解決這個問題?你能否使用常數級空間複雜度實現? 示例: // 初始化一個單鏈表 [1,2,3]. ListNode head = ne
劍指-OFFER_5 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。
題源: 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。 package Chap2; /** * 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。 */ imp
刪除連結串列的節點
請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個連結串列 -- head = [4,5,1,9],它可以表示為: 4 -> 5 -> 1 -> 9 示例 1: 輸入: head = [4,5,1
[LeetCode] Linked List Random Node 連結串列隨機節點
Given a singly linked list, return a random node's value from the linked list. Each node must have the same probability of being chosen. Follow up: Wha
[CareerCup] 2.3 Delete Node in a Linked List 刪除連結串列的節點
2.3 Implement an algorithm to delete a node in the middle of a singly linked list, given only access to that node.EXAMPLEInput: the node c from the linke
[LeetCode] Delete Node in a Linked List 刪除連結串列的節點
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed the linked list is 1 -> 2 ->
2.輸入一個連結串列,從尾到頭列印連結串列每個節點的值
輸入一個連結串列,從尾到頭列印連結串列每個節點的值 /** * public class ListNode { * int val; * ListNode next
從尾到頭列印連結串列輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
輸入一個連結串列,從尾到頭列印連結串列每個節點的值。//迭代/** * struct ListNode { * int val; * struct ListNode *ne
【劍指offer】面試題18:刪除連結串列的節點
目錄: 題目一:O(1)時間內刪除一個節點 題目二:刪除連結串列中重複的節點 題目一:O(1)時間內刪除一個節點 題目1:給定單向連結串列的頭指標和一個節點指標,定義一個函式在O(1)時間刪除該節點。 在單向連結串
遞迴從尾到頭列印連結串列每個節點的值
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val =
java實現從尾到頭列印連結串列每個節點的值
import java.util.ArrayList; class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public clas
輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode