leetcode刷題 鍊錶篇

2021-10-21 02:42:38 字數 3566 閱讀 4554

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...