卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

如何獲取兩條單向鏈表相交部分的起始節(jié)點(diǎn)

問題描述給定兩條單向無環(huán)鏈表,有兩種情況,一是兩條鏈表為兩條獨(dú)立無交點(diǎn)鏈表,另一種是兩條鏈表從某一交點(diǎn)開始剩余部分為公共相同的節(jié)點(diǎn)。編寫算法,對(duì)于第一個(gè)種情況,返回null,對(duì)于第二種情況,返回兩條

問題描述

給定兩條單向無環(huán)鏈表,有兩種情況,一是兩條鏈表為兩條獨(dú)立無交點(diǎn)鏈表,另一種是兩條鏈表從某一交點(diǎn)開始剩余部分為公共相同的節(jié)點(diǎn)。編寫算法,對(duì)于第一個(gè)種情況,返回null,對(duì)于第二種情況,返回兩條鏈表公共部分的起始節(jié)點(diǎn)。約束:時(shí)間復(fù)雜度為O(n*m),n和m為兩條鏈表的長(zhǎng)度,空間復(fù)雜度為O(1)即原地操作,無需額外數(shù)據(jù)結(jié)構(gòu)輔助操作。

算法實(shí)現(xiàn)

通過以下步驟獲取兩條單向無環(huán)鏈表的相交段起始節(jié)點(diǎn):

1. 聲明兩個(gè)指針,分別遍歷兩條鏈表,并記錄每條鏈表的最后一個(gè)節(jié)點(diǎn);

2. 兩個(gè)指針遍歷完當(dāng)前鏈表后,互換,遍歷對(duì)方鏈表;

3. 如果兩個(gè)指針指向同一個(gè)節(jié)點(diǎn),則為相交段起始節(jié)點(diǎn);

4. 如果兩條鏈表最后一個(gè)節(jié)點(diǎn)不是同一個(gè)節(jié)點(diǎn),則代表兩條鏈表不相交。

輔助函數(shù)

編寫一個(gè)函數(shù),將一條鏈表轉(zhuǎn)換為一個(gè)字符串,用于輔助本地測(cè)試。

本地測(cè)試

編寫本地測(cè)試主方法,并運(yùn)行本地測(cè)試,觀察控制臺(tái)輸出,確保輸出符合預(yù)期,本地測(cè)試通過。

示例代碼

```java

// 靜態(tài)內(nèi)部類表示鏈表節(jié)點(diǎn)

static class ListNode {

int val;

ListNode next;

public ListNode(int val) {

val;

null;

}

}

// 獲取兩條鏈表相交部分的起始節(jié)點(diǎn)

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {

if (headA null || headB null) {

return null;

}

ListNode pA headA;

ListNode pB headB;

while (pA ! pB) {

pA pA null ? headB : ;

pB pB null ? headA : ;

}

return pA;

}

// 將鏈表轉(zhuǎn)換為字符串輔助函數(shù)

public String listToString(ListNode head) {

StringBuilder sb new StringBuilder();

ListNode current head;

while (current ! null) {

().append(" -> ");

current ;

}

("null");

return ();

}

// 本地測(cè)試主方法

public static void main(String[] args) {

Solution solution new Solution();

ListNode node1 new ListNode(1);

ListNode node2 new ListNode(2);

ListNode node3 new ListNode(3);

node2;

node3;

ListNode node4 new ListNode(4);

node2; // intersection point

((node1));

((node4));

ListNode result (node1, node4);

if (result ! null) {

("Intersection Node Value: " );

} else {

("No Intersection Node Found");

}

}

```

通過以上算法實(shí)現(xiàn)和測(cè)試代碼,可以有效獲取兩條單向鏈表相交部分的起始節(jié)點(diǎn)。

標(biāo)簽: