leetcode鍊錶相關經典習題

2021-09-14 04:21:15 字數 3005 閱讀 6718

141.給定乙個鍊錶,判斷鍊錶中是否有環。

public class solution

listnode fast=head;

listnode slow=head;

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

}return false;}}

142.給定乙個鍊錶,返回鍊錶中第乙個入環的節點,若沒有環,返回null;

public class solution

listnode fast=head;

listnode slow=head;

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

}if(fastnull||fast.nextnull)

while(fast!=head)

return fast;}}

16.給定兩個鍊錶,判斷兩個鍊錶是否有交點。

思路:設定兩個指標p1和p2.

p1從 heada 開始,p2從 headb 開始;

p1 p2分別從表頭開始每次向後移動乙個節點,移動到末尾處時,再換乙個鍊錶從頭向後移動,如果p1=p2,則證明有交點,否則返回null;

**如下:

public class solution

listnode p1=heada;

listnode p2=headb;

boolean isp1change=false;

boolean isp2change=false;

while(p1!=null||p2!=null)

p1=p1.next;

p2=p2.next;

if(p1.next==null)

if(p2.next==null)

if(isp1change&&isp2change&&p1==null&&p2==null)

}return null;

}

19,刪除鍊錶的倒數第n個節點

class solution

listnode p1=head;

listnode p2=head;

for(int i=0;i}

206.反轉鍊錶:如123456–>654321(迭代方法)

class solution

listnode root=new listnode(0);

listnode n=null;

while(head!=null)

return root.next;}}

206反轉鍊錶:如123456–>654321(遞迴方法)

class solution

listnode h=reverselist(head.next);

head.next.next=head;

head.next=null;

return h;}}

21.合併兩個有序鍊錶為乙個新鍊錶;

class solution else if(p1!=null&&p2null)else if(p1null&&p2!=null)else if(p1.val<=p2.val)else

p=p.next;

}return p3.next;}}

724給定乙個整數型別的陣列 nums,請編寫乙個能夠返回陣列「中心索引」的方法。

我們是這樣定義陣列中心索引的:陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。

如果陣列不存在中心索引,那麼我們應該返回 -1。如果陣列有多個中心索引,那麼我們應該返回最靠近左邊的那乙個

class solution

int sum=0;

int left=0;

int right=0;

for(int num:nums)

for(int i=0;i2.兩數相加:給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

class solution

return root.next;

}

}

169.求陣列中的眾數;

class solution else}}

return max;}}

240. 搜尋二維矩陣 ii:編寫乙個高效的演算法來搜尋 m x n 矩陣 matrix 中的乙個目標值 target。該矩陣具有以下特性:

每行的元素從左到右公升序排列。

每列的元素從上到下公升序排列。

示例:現有矩陣 matrix 如下:

[[1, 4, 7, 11, 15],

[2, 5, 8, 12, 19],

[3, 6, 9, 16, 22],

[10, 13, 14, 17, 24],

[18, 21, 23, 26, 30]

]給定 target = 5,返回 true。

給定 target = 20,返回 false。

class solution

int row=matrix.length;

int col=matrix[0].length;

int x=row-1;

int y=0;

while(x>=0&&y}return false;}}

LeetCode鍊錶相關問題總結

獲取鍊錶的長度 兩種方法 listnode frist head int length 0 先獲得鍊錶的長度 while frist null 或者 listnode frist head int length 1 先獲得鍊錶的長度 while frist.next null 區別就是使用第二種方法...

LeetCode 鍊錶相關 重新理解

劍指 offer 24 反轉鍊錶 92774.3 簡單之前用python做過了,但理解的不透徹,重新用js再做一下。個人理解 指標指向 乙個值,表示指標裡存放的是這個值的位址,即箭頭末尾是箭頭方向的位址,所以兩個指標相等,表示位址相同,即是同乙個節點 首先,node.next 相當於鍊錶結構中的左 ...

LeetCode 鍊錶相關題目總結

之前已經對鍊錶相關常用操作進行了總結。在這裡,對 leetcode 與鍊錶相關的題目解答思路進行總結。1.兩個鍊錶,求是否有相交的節點並返回 方案一 將兩個鍊錶的各節點依次存入兩個物件中,然後雙層迴圈查詢是否存在有相同的節點 方案二 先求出兩個鍊錶各自長度,將長鍊錶先向尾部移動至和短鍊錶同樣長度的位...