二級指標筆記

2021-08-01 11:30:50 字數 1091 閱讀 3408

這兩天在leetcode上碰到乙個這樣的題目,

remove nth node from end of list

,這個題目學習到了兩種新的方法。

1.路標標記法

2.二級指標應用

首先是關於路標標記,以後如果碰上這樣一種情況,要從乙個類似於鍊錶結構的不可逆的物件的結尾開始取相對位置,則可以用乙個先行路標p走

x個位置,走了

x位置之後再從新初始化乙個物件

q指向頭部,那麼當

p走到結束位置的時候,

q就是相對於p距離

x位置。

並且此時只用遍歷一次。

顯然的,通常以前我的做法就是

/..../

listnode *tmp= curr;

prev->next = curr->next;

curr = curr->next;

delete tmp;

當然,現實的情況往往沒有這麼簡單,因為還要判斷鏈prev指標是否為空(刪除煉表頭的時候),所以,這樣的**就顯得比較冗餘。

然後,可以盡心一點小小的改進,定義乙個二級指標curr(就算不怎麼熟悉二級指標,但既然他是乙個指標,那麼就代表著乙個位址,指標

=位址是永遠成立的),然後令他指向當前表頭,然後再進行遍歷。然後刪除的時候只需要

listnode **curr = &head;

/*....loop...*/

listnode *entry = *curr;//curr位址中存放著當前的鍊錶結點的實體

*curr = (*curr)->next;//curr的位址值存放的鍊錶結點改變為下乙個鍊錶結點

delete entry;

這樣做的話就三行搞定了。為什麼可以這樣,原因是因為上乙個指標的next指向的位址是

curr

,curr

裡的東西就是

prev->next

,所以,我們可以直接改變

curr

裡的東西,當

perv

指向的位置並沒有發生改變,就不需要

perv

的幫助來刪除鍊錶結點。

然後總結差不多就這麼多了,做了一些題目來鞏固鍊錶的知識。

指標與二級指標

int num 10 int p1 int p2 p1 指標的指向結構如下圖所示 0x4000 0x3000 p2 0x2000 p1 num p2 表示的是儲存p2指標的位址 p2 表示的是p2指向的位址,即指標p1存放的位址 p2 表示指標p2指向位址中所存的值,即指標p1指向的位址,即變數nu...

一級指標二級指標

例如 int p null int代表指標p指向的資料型別是int型,代表這是乙個指標變數,1 指標變數儲存的內容是指向的變數的位址 2 在使用sizeof判斷指標的位元組數時,在32位機器上為4個位元組,在64位機器上為了相容,仍然是四個位元組大小 3 小知識點,不同型別的指標除了指向的變數資料型...

二級指標 P

首先理解幾個概念 1.對於乙個普通變數,進行引用操作,得到的是一級指標。如int a 0 int p a,則 a就是一級指標。因為 a的值就是a的位址,p的值也是a的位址,則 a和p就是一級指標變數 簡略為指標 對 a進行解引用操作,int b a 這b等於0.2.對於普通變數作為形參傳遞到函式內部...