劍指offer
1.鍊錶,新增鍊錶
struct listnode
void addtotail(listnode**phead, int value)
刪除鍊錶
void removenode(listnode**phead,int value)
else
}if(pdelete!=null)
2. 從頭到尾列印鍊錶
**
* struct listnode
* };
*///輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。
class solution
vectorans;
while(!s.empty())
return ans;
}};
3.在o(1)的時間內刪除鍊錶
/*
struct listnode
};*/
/*在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。
例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5
因為相同的結點全部都要刪除,設定三個指標,乙個指向當前結點,乙個指向前一結點,乙個指向下一結點,一旦遇到當前結點等於下一結點的情況,
那麼就一直移動,直到遇到下乙個結點不同的狀況,再將前乙個結點指向此時結點的位置。
*/class solution
else
if(pprenode==null)
phead = pnextnode;
else
pprenode->next = pnextnode;
pnode = pnextnode;
} }
return phead;
}};
4.鍊錶的倒數第k個節點
乙個指標先往前走k-1步,然後另外乙個指標才開始走,當第乙個指標走到尾部了,那麼第二個指標正好指向了倒數第k個結點
/*
struct listnode
};*/
class solution
listnode *second = plisthead;
while(first->next)
return second;
}};
5.反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。
儲存新的前一結點,當前結點和下一結點三個指標,只要下一結點為空,那麼我們就到了原本結點的尾部,這時正是新鍊錶的頭部
/*
struct listnode
};*/
class solution
return pnewlist;
}};
6.合併兩個排序的鍊錶
/*
struct listnode
};*/
class solution
else
cur->next = nullptr;
} if(ptr1)
cur->next = ptr1;
if(ptr2)
cur->next = ptr2;
return newlist->next;
}};
7.兩個鍊錶的第乙個公共節點
/*
struct listnode
};*/
class solution
return length;
}listnode* findfirstcommonnode( listnode* phead1, listnode* phead2)
listnode* pfirst=plistnodelong;
return pfirst;
}};
8.二叉搜尋樹與雙向鍊錶
9.複雜鍊錶的複製
輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
11.兩個棧實現乙個佇列
template class cqueue
;templatet cqueue::deletehead()
}tmp = stack2.top();
stack2.pop();
return tmp;
}
12.包含min函式的棧
13.棧的壓入和彈出序列
/*
輸入兩個整數序列,第乙個序列表示棧的壓入順序,
請判斷第二個序列是否為該棧的彈出順序。假設壓入
棧的所有數字均不相等。例如序列1,2,3,4,5是某棧
的壓入順序,序列4,5,3,2,1是該壓棧序列對應的
乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列
的彈出序列。
演算法描述:
首先判斷兩個序列的元素數目是否相等,
不相等,則肯定不是;
遍歷pop,每遍歷乙個數,先將push陣列裡的壓入棧,以i為push陣列游標,
直到棧頂值與當前pop值相等,
,然後彈出棧頂值,如果
直到i大於push陣列的大小還沒碰到棧頂值與pop陣列相等
的值,則返回false
*/class solution
s.pop();
}return true;
}};
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。
/*
struct listnode
};*/
class solution
while(pslow!=pfast);
pslow = phead;
while(pslow!=pfast)
return pslow;
}};
2. 劍指offer 尋找鍊錶中的倒數第k個節點,和程式設計之美中判斷兩個鍊錶是否相交類似,都是從鍊錶尾部開始的。
程式設計之美的兩道題目
1.從無頭單鏈表中刪除節點
由於單鏈表沒有頭指標,,不能簡單的刪除,會使得鍊錶被分割
void deleterandomnode(node* pcurrent)
* };*///輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。class solution vectorans; while(!s.empty()) return ans; }};
《劍指offer 之鍊錶題目
這幾天在看 劍指offer 寫的很好,跟july的各有千秋,更加注重歸納總結,筆試面試臨時抱佛腳,決定要啃下這其中的46道題目。ok,把每道題目自己實現,相同的歸成一類。這次把所有的與list相關的題目列出來。思路 從尾到頭列印list的話,考慮用stack先把各節點儲存起來,遍歷完以後再將stac...
劍指offer 鍊錶題目集合
從尾到頭列印鍊錶 class solution 返回從尾部到頭部的列表值序列,例如 1,2,3 def printlistfromtailtohead self,listnode rs if not listnode return rs while listnode listnode listnod...
劍指Offer題目1518 反轉鍊錶
題目1518 反轉鍊錶 時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 3300 解決 1207 題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 10...