不斷地積累,才能使你與offer的差距越來越??!——DKider
此時此刻,電腦上正運行著爬蟲,爬豆瓣電影的那個。。。。。過程還是挺曲折的
題目:給定一個鏈表中的某一個節(jié)點的情況下,刪除該節(jié)點。
例如:Head->1->2->3->4->5->7->7->8
給定一個指向節(jié)點5的cur指針,并在不使用新節(jié)點的情況下刪除它。
刪除節(jié)點,這是增刪改查中的第二個功能,可以看出,這個功能很重要!
在前面我們已經(jīng)學(xué)過了如何刪除節(jié)點了,這里講過——(http://www.itdecent.cn/p/64d9bc63142a)
pre.next=cur.next # 這一句就可以刪除cur節(jié)點
cur=pre.next # 遍歷下一個節(jié)點
當然為了更好理解,也可以加一個Next指針指向當前節(jié)點的后繼節(jié)點:
pre.next=Next # 這就非常直觀了
cur=Next # 遍歷下一個節(jié)點
還有,你也可以這么寫:
pre.next=pre.next.next #
cur=pre.next # 遍歷下一個節(jié)點
以上三種都是一個意思,都可以刪除當前節(jié)點cur,第二種要多用一個空間來保存Next。
可以看出以上三種方法,都需要一個指向當前節(jié)點的pre節(jié)點來講當前節(jié)點刪除。根據(jù)昨天和前天的內(nèi)容,我們可以總結(jié)出,要改變鏈表,有兩個方向——改變data域和改變next域,顯然上面的三種方法都是改變next域的方法。
本題只給定了指向要刪除節(jié)點的指針,無法得到其前驅(qū)節(jié)點,所以這三種方法不行。只給當前節(jié)點的話,只能刪除當前節(jié)點的后繼節(jié)點,也就是說:我們只能刪除后繼節(jié)點,同時還不能讓后繼節(jié)點的數(shù)據(jù)消失,還要將當前節(jié)點的值刪除。因此,我們只要交換前后兩個節(jié)點的值,然后刪除后繼節(jié)點,就完成了。如何交換我前天也講了。
說的形象一點,就是當前節(jié)點要消失,假裝成后繼節(jié)點,把后繼節(jié)點干掉!那就只能把當前節(jié)點的值改成后繼節(jié)點的值,假裝成后繼節(jié)點,然后把真的后繼節(jié)點刪掉!
說的很清楚了,實現(xiàn)如下:
cur.data=cur.next.data
cur.next=cur.next.next
這種方法有一個缺點,就是沒法刪除最后一個節(jié)點。所以在面試遇到時,一定要問清楚。
代碼太簡單,我就不解釋了:
import random
class LNode:
def __init__(self,arg):
self.data=arg
self.next=None
"""
題目描述:
給Head->1->2->2->4->5->5->6
^
|
p
只給定p指針刪除節(jié)點
要求:
方法:
"""
def creatLink(x):
i = 1
head = LNode(None)
tmp = None
cur = head
while i <= x:
n=random.randint(1,9)
tmp = LNode(n)
cur.next = tmp
cur = tmp
i += 1
return head
def DelNode(head,p):
if head is None or head.next is None or head.next.next is None:
return head
p.data=p.next.data
p.next=p.next.next
return head
if __name__ == '__main__':
head=creatLink(10)
p=head.next.next.next.next.next
print("BeforeReverse:")
cur = head.next
while cur != None:
print(cur.data)
cur = cur.next
print("p->",p.data)
head=DelNode(head,p)
print("\nAfterReverse:")
cur = head.next
while cur != None:
print(cur.data)
cur = cur.next
還有今天的爬蟲上我用了數(shù)據(jù)庫,是學(xué)Java的室友XHH教我如何安裝MYSQL的,也是他教我如何連接數(shù)據(jù)庫,感謝!
一個注意點:
try:...
except:
finally:
這個錯誤處理結(jié)構(gòu),一定要在確定代碼運行后,不會丟失大量數(shù)據(jù),不會丟失重要數(shù)據(jù),在調(diào)試階段不要用。而且最好在except后指明確定的錯誤類型,不然在找bug時,會讓你砸了電腦。
目前需要學(xué)的東西太多了,雖然基礎(chǔ)部分學(xué)校老師講了,但是深度還不夠,而且由于課時安排的原因,很多課并沒有講完,就像今天室友電話面試,被問到學(xué)校里計算機網(wǎng)絡(luò)的目錄是啥?這。。對于我們學(xué)校以及學(xué)院以及我們本身來說,能答上來的屈指可數(shù)。
我們一定要打好堅實的基礎(chǔ)!才能超越別人,拿下offer。
天下第一!強到?jīng)]邊!