鍊錶的反轉 單次訪問任意(倒數)節點

2021-08-15 15:41:56 字數 1082 閱讀 9638

一、鍊錶的反轉

1.不申請輔助鍊錶實現鍊錶的反轉

//反轉鍊錶

void re_list(list* head)

//申請兩個指標,分別執行第一和第二個節點,並依次相加,改變鍊錶的方向

list *one=head->next;

list *second= one->next;

//先完成第乙個和第二個節點的反轉,並使得第乙個節點指向null,作為最後乙個節點

list* temp = second->next;

second->next = one;

one->next = null;

one = second;

second = temp;

//兩指標依次相加,並反轉鍊錶單向

while (second != null)

//此時指標one指向原先鍊錶的最後乙個節點,反轉後和頭相連

head->next = one;

2.訪問倒數第i個節點,並只遍歷一遍

//查詢倒數第i個節點 使用快慢兩個指標實現

list* find_lasti_node(list* head,int i)

if (i < 1)

list* fast=head;

list* slow=head;

//fast指標超前slow指標i個位置 當fast指標到達鍊錶尾部時 slow指標指向倒數第i個位置

int num = 0;

while (fast->next != null)

return slow;

3.訪問鍊錶的中間節點

//查詢鍊錶中間的節點

list* find_mid_node(list* head)

list* fast = head;

list* slow = head;

//fast指標快於slow指標兩倍的遍歷速度 當fast指標到達鍊錶尾部時 slow指標指向中間位置

while (fast!=null&&fast->next!=null)//使用兩個判斷條件防止節點數的奇偶,且fast指標判斷在前

return slow;

}

刪除鍊錶的指定倒數節點

如下 include include int location 記錄指定刪除節點的位置 struct data 存放資料的資料結構體 void create struct data phead 建立鍊錶 void print struct data phead 列印鍊錶中存放的資料 struct d...

查詢鍊錶倒數的節點

雖然馬上要實習了,但是基本的東西不要忘了,把以前一些東西繼續溫故知新。對於查詢鍊錶倒數的節點這個問題,就比較經典了,老生常談的。大家都知道,最經典的解法就是首先找到k 1個,然後兩個指標,一前一後跑,知道後面的指標跑到最後乙個,前面的指標也就是指向了倒數第k個節點了。不過在這裡需要注意以下幾種情況。...

反轉鍊錶和查詢倒數第K個節點

一 鍊錶的逆置 反轉鍊錶 題目 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後的頭結點 節點的結構 這裡面我們需要三個指標分別是cur,用來順序遍歷整個鍊錶,newhead指標用來儲存逆置的頭結點,prev用來逆序遍歷鍊錶.步驟 1 先遍歷整個鍊錶找到當前節點的下乙個節點為空,即為尾節點...