5個常見的鍊錶操作

2021-10-07 01:36:56 字數 2694 閱讀 9979

1.單鏈表反轉

leetcode對應題目

比較適合用頭插法,大致思路就是:

首先判斷這個引數是不是null,如果是的話,那就直接返回null,如果不是的話,開始正常操作:.建立三個新的結點,其中乙個當做新的頭結點,乙個指向原來的頭結點,另乙個起輔助作用。然後開始遍歷,在原來結點還存在的情況之下,開始不斷地斷開和頭插。

if

(null == head)

return null;

listnode *newhead,*p,*q;

newhead->next = null;

p = head;

while(p)

return newhead->next;

2.鍊錶中環的檢測

leetcode對應題目

這道題的思路就是:使用快慢指標,乙個每一次走一步,乙個每一次走兩步。所以如果有環的話,他們兩個是一定能遇到的,如果沒有環的話,這兩個指標就不會遇到了。首先判斷頭結點和第乙個節點存不存在,如果只有頭結點或者只有第乙個節點的話,那就說明是不存在環的,直接返回錯誤。然後建立兩個指標,在兩個指標都不相同的情況下,進行遍歷,遍歷的結果是要麼這兩個指標都遍歷到了最後,要麼就是出現這兩個指標指向同乙個地方,分別返回false和true。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

//如果跳出迴圈就說明是存在環的

return true;}}

;

3.兩個有序的鍊錶合併

leetcode對應題目:

思路:首先網上的乙個方法是先隨意將這兩個鍊錶鏈結起來,然後再使用排序方法來將這個鍊錶排序好,還有一種方法就是建立乙個表頭,然後對這兩個表進行遍歷判斷大小,小的直接插入到新建的表中,依次類推。這裡我參考網上的,選擇第二種方法。

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*/class solution

else

}//然後就會出現至多乙個空,如果出現的話,就直接接到後來去

if(l1)

else

//然後就要刪除哨兵

temp=head;

//temp指向head

head=head->next;

//然後刪去temp

delete

(temp)

;return head;}}

;

4. 刪除鍊錶倒數第n個節點

個人感覺的思路就是,直接把n當做乙個統計的,然後把指標定位到n-1個位置上,然後就世界開始刪除

不對,這個是倒數的那個節點。所以要麼就是首先先知道這個鍊錶多長,然後在通過兩個相減,直接知道倒數第二個等於正數第幾個,先寫乙個方法來獲取鍊錶的長度。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

return num;

}public:

listnode*

removenthfromend

(listnode* head,

int n)

//其他情況下進行判定

int count=

(listnum-n)

;//這個count就是正數第幾個。需要到count前乙個就行

count--

;while

(count)

//然後這個時候就是定位到那個要刪除的結點的前面乙個了,然後直接刪

p->next=p->next->next;

return head;}}

;

5.求鍊錶的中間節點

思路,這個的話就是之前那個類似,首先需要求出這個鍊錶的長度,然後在長度是奇偶的情況之下分類討論,依次求出對應的位置並返回對應的值

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

return num;

}public

: listnode*

middlenode

(listnode* head)

else

while

(count)

return head;}}

;

5個常見的鍊錶操作

時間複雜度 o n 空間複雜度 o 1 listnode reverselist listnode head return temp public static node reverse node list currnode.next prenode prenode currnode currnod...

五個常見鍊錶操作

package cn.wangbo.list 這是鍊錶類,封裝了鍊錶節點資訊 public class node public node t val,node next 單鏈表反轉,只需要將每個結點的next指標指向其前驅結點。這個過程中,為了避免斷鏈,我們需要新建三個結點記錄當前結點 當前結點的前...

鍊錶的常見操作

include include includeusing namespace std typedef struct nodetype node typedef struct dnodetype dnode 建立單鏈表 node createlist node head node current he...