鍊錶調整問題

2021-08-14 21:47:22 字數 1547 閱讀 2735

分析題意,可知有兩種情況:

所以對於該題,有兩種方法:

* 對於鍊錶問題,兩種通用解法的適用場景

* 方法一中調整陣列也可不用額外陣列,這便是**完美洗牌**問題

* 方法二鍊錶的具體調整方式

public

static

void relocate(node head)

arraylistlist = new arraylist<>();

node curnode = head;

while (curnode != null)

int num = new

int[list.size()];

if ((list.size() & 1) == 0)

for (int i = list.size() / 2; i < list.size(); i++)

}else

for (int i = list.size() / 2; i < list.size() - 1; i++)

num[list.size() - 1] = list.get(list.size() - 1);

}head.value = num[0];

node cur = head;

for (int i = 1; i < num.length; i++)

}

public

static

void

relocate(node head)

//定義快慢指標找到中間位置

// 1 -> 2 -> 3 -> 4,最終mid停在2處

// 1 -> 2 -> 3 -> 4 -> 5,最終mid依舊停在2處

node slow = head;

node fast = head.next;

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

node mid = slow;

//分成左右兩個鏈,如 左鏈是 1 -> 2,右鏈是3 -> 4 -> 5

node rhead = slow.next;

mid.next = null;

node lhead = head;

//乙個乙個合併兩鏈,最終形成 1 -> 3 -> 2 -> 4 -> 5

mergelist(lhead, rhead);

}//合併兩鏈函式,注意:兩鏈不是空鍊錶,至少乙個元素(適用於 兩鏈長度關係什麼都行的情況,該題中左鏈 <= 右鏈)

/* * 1 2 3

* 4 5 6 7

* 連線順序為 4連2,1連4,這是一次迴圈,然後5連3,2連5,這又是一次迴圈

* 然後退出迴圈,3連6

*/public

static

void

mergelist(node lhead, node rhead)

lcur.next = rcur;

}

鍊錶 鍊錶環問題總結

給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?1 如何判斷是否存在環?對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到n...

LeetCode 反轉鍊錶(鍊錶問題)

難度 簡單 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null使用三個listnode,分別是prev,curr,next。curr是當前指標指向的節點,prev是curr的前乙個節點,頭節點的前乙個節點是null,next是curr的下乙個節點,用於遍歷鍊...

鍊錶問題(二) 有序鍊錶合併

已知兩個鍊錶head1和head2個字有序,請把他們合併成乙個鍊錶依然有序 包含所有結點,即便大小相同 struct node 方法一 遞迴實現 node merge node head1,node head2 else return head 方法二 迴圈實現 node merge node he...