leetcode-160 找出兩個鍊錶的相交節點
思路:設a鍊錶的長度是a+c,b鍊錶的長度是b+c,兩個鍊錶的公共部分長度是c,a+c+b=b+c+a。
同時從a和b的頭部開始訪問鍊錶,當a鍊錶訪問到尾部時從b鍊錶的頭部開始訪問,當b鍊錶訪問到尾部時從a鍊錶的頭部開始訪問。兩個鍊錶會同時訪問到相同的節點。
public listnode getintersectionnode(listnode heada, listnode headb)leetcode-206反轉鍊錶return l1;
}
1、頭插法(tips:單鏈表的head不存放資料,作用就是儲存單鏈表的頭)
//迭代 頭插法2、遞迴法public listnode reverselist(listnode head)
return pre;
}
思路:遞迴實質上時系統幫你壓棧的過程,系統在壓棧時會保留現場,乙個return完以後恢復前乙個節點壓棧時的現場,最後完成整個鍊錶的翻轉。
//遞迴法leetcode-2鍊錶合併:將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。listnode reverselist(listnode head)
//反轉剩餘鍊錶並將第乙個元素放在列表的結尾
listnode rest=reverselist(head.next);
head.next.next=head;
head.next=null;
return rest;
}
1、迭代法
class solution else2、遞迴法//將pre指標後移,不然會一直停留在第乙個位置
pre=pre.next;
}//將煉表裡剩餘部分存放進去
pre.next=l1==null?l2:l1;
return prehead.next;}}
//遞迴合併2、迭代法public listnode mergetwolists(listnode l1,listnode l2)else if(l2==null)
/*可以劃分為與母問題相似的子問題,可以考慮遞迴
**選擇第乙個較小的節點,剩餘部分由第乙個節點的剩餘節點和另乙個鍊錶組成選擇第乙個較小的節點,
**剩餘部分由第乙個節點的剩餘節點和另乙個鍊錶組成
*/ else if(l1.valleetcode-83從有序鍊錶種刪除重複元素
1、遞迴法
class solution
}
class solution elseleetcode-19 刪除鍊錶的倒數第n個結點(下面使用的dummy結點被稱為啞結點,是在鍊錶千公尺那新增的乙個結點,存放位置是資料結點之前,好處是加入啞結點之後可以使資料結點具有前驅結點)}return head;} }
方法1:兩次遍曆法(超出了時間限制)
public listnode removenthfromend(listnode head,int n)方法2:1次遍曆法//設定length為需要遍歷的長度
length=length-n;
//將first指標重新指向啞結點
first=dummy;
//遍歷到需要刪除結點的前面乙個結點
while(length>0)
first.next=first.next.next;
return dummy.next;
}
class solutionleetcode-24兩兩交換鍊錶中的結點(還是迭代法思考起來更好理解一些orz)//這樣使second結點移動了length-n個結點,正好到達要刪除結點的前面乙個結點
while(first!=null)
second.next=second.next.next;
return dummy.next;}}
//定義啞結點
listnode dummy=new listnode(-1);
dummy.next=head;
listnode pre=dummy;
while(pre.next!=null&&pre.next.next!=null)
return dummy.next;
}
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 利用快慢指標找到中間節點,當快指標走到末尾時,慢指標指向中間節點 交中間節點之後的節點進行鍊錶反轉 設定指標p1從h...
分隔鍊錶(鍊錶 LeetCode)
題目鏈結 給你乙個鍊錶和乙個特定值 x 請你對鍊錶進行分隔,使得所有小於 x 的節點都出現在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5維護兩個鍊錶,乙個鍊錶儲存比x小的結點,另乙個鍊錶儲...