一、鍊錶的反轉
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 先遍歷整個鍊錶找到當前節點的下乙個節點為空,即為尾節點...