class solution
return result;
}};
class solution
};
class solution
return cura;
}};
【注】思路:相交節點到尾部的節點數是一樣的,所以當cura遍歷到尾部時,再從headb開始遍歷,同當curb遍歷到尾部時,再從heada開始遍歷,他們指標相遇時的節點即為相交結點,如果沒有相交結點,最後都遍歷到null
class solution
return false; //無環返回false
}};
【注】思路:如果有環,快指標一定先於慢指標進入環,當他們相遇則表示有環,若遍歷到尾部還沒有相遇則一定無環
class solution
else
}};
//方法一
class solution
cur=head;
while(knext;
}return cur;
}};
//方法二:將鍊錶存入陣列中,然後返回中間的元素
class solution ;
while (list.back()->next != null)
list.push_back(list.back()->next);
return list[list.size() / 2];
}};
//方法三:雙指標法
class solution
return slow;
}};
class solution
for(int i=0,j=result.size()-1;i=0;i++,j--)
return true;
}};
【注】 本題最後返回bool變數,可以將鍊錶值存入陣列,這樣後面元素和前面元素比較起來很方便
class solution else
}return head;
}};
class solution else
}return dummyhead->next; //注意新的頭結點
}};
//雙指標法
class solution
return pre;
}};
//遞迴法
class solution
listnode* reverselist(listnode* head)
};
class solution
return slow->val;
}};
【注】雙指標法:當快指標達到鍊錶尾時,慢指標指向結點的值就是要返回的值
//方法一:借助棧
class solution
while(!st.empty())
return result;
}};
//方法二:遞迴法
class solution ;
vectorresult=reverseprint(cur->next);
result.push_back(cur->val);
return result;
}};
//方法3:直接將值存入陣列,再呼叫reverse函式
class solution
reverse(result.begin(),result.end());
return result;
}};
【注】務必手動模擬一邊
class mylinkedlist
};//初始化鍊錶
mylinkedlist()
//獲取第index個結點數值,如果索引無效返回-1
int get(int index)
linkednode* cur = _dummyhead->next;
while(index--)
return cur->val;
}//在鍊錶最前面插入乙個結點,即成為鍊錶的新的頭結點(那個虛擬頭結點別忘了)
void addathead(int val)
//在鍊錶尾部新增乙個結點
void addattail(int val)
cur->next=newnode;
_size++;
}//在第index結點之前插入乙個新結點,三種情況:index<0在煉表頭插入;index=鍊錶長度,在尾部插入;index>鍊錶長度,不插入,返回空
void addatindex(int index, int val)
newnode->next=cur->next;
cur->next=newnode;
_size++;
}//index有效,則刪除第index個節點
void deleteatindex(int index)
linkednode* tmp=cur->next;
cur->next=cur->next->next;
delete tmp;
_size--;
}private:
int _size;
linkednode* _dummyhead;
};
class solution
return false; //無環返回false
}};
142.環形鍊錶||
class solution
return index2;}}
return null; //說明無環,返回null
}};
【注】一定畫圖理解,模擬一遍 刷題篇 合併鍊錶
鍊錶合併問題是一道經典題目,包括後面引申出的k個鍊錶合併。leetcode 21 合併兩個有序鍊錶可以使用遞迴與非遞迴兩種方法實現。1.遞迴方法def mergetwolists l1,l2 if not l1 return l2 ifnot l2 return l1 if l1.val l2.va...
Leetcode刷題鍊錶之環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。定義兩個指標,從頭節點開始,兩個指標都向右移動,但是設定他們的移動速度不一樣,如果為環形鍊錶,則指標肯定會相遇。若為直鏈表,兩個指標至少有乙個為空。definition for singly linked list.class listnode public cla...
Leetcode鍊錶刷題 pytho語言
為方便後續的使用查詢,記錄一下 函式包括 找到兩個單鏈表相交的起始節點 反轉單鏈表 刪除鍊錶中等於給定值 val 的所有節點 definition for singly linked list.class listnode object def init self,x self.val x self...