8、 給出乙個單鏈表,不知道節點個數n,怎樣只遍歷一次就可以求出中間節點。
這個問題的大體思路是:設立兩個指標,比如*p和*q。p每次移動兩個位置,即p = p->next->next;
q每次移動乙個位置,即q = q->next; 當p達到最後乙個節點時,q就是中間節點了。
下面是可以實現的具體**:
#include
#include
typedef struct nodenode;
/*建立單鏈表*/
node *creat()
else
}p->next = null; //末尾節點必須指向空,否則會有災難性後果。
head = head->next;
return head;
/* 列印鍊錶*/
void print(node *head)
printf("the length of chain is %d \n",n);
q = head;
printf("the chain is :\n");
while (q != null)
printf("\n");
/*不 知道節點數n,遍歷一次找到中間節點*/
void searchmid(node *head)
else
} printf("the mid node is : %d\n",q->data);
int main(void)
注意:在這個程式裡被塗為紅色的**,是關鍵性**,你可能在《程式設計師面試寶典》之類的書
上看到過這個解題思維,但是那只是思維,具體**是不能參考的,如果**裡沒有這部
分紅色**的話,當你輸入的數值個數是奇數個時執行到while(p->next->next != null);
時會出現段錯誤。
C語言中的經典小程式1
首先宣告所寫的這些函式都是本人自己實踐過的,每乙個程式都是能夠實際執行的。1.將乙個十進位制的無符號整型資料轉換成二進位制形式表示,用c語言實現。我寫了乙個程式,經過執行能夠實現 include void funcint to ox unsigned int a int main void void...
c語言10個經典小程式
程式1 題目 有1 2 3 4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?1.程式分析 可填在百位 十位 個位的數字都是1 2 3 4。組成所有的排列後再去 掉不滿足條件的排列。2.程式源 main 程式2 題目 企業發放的獎金根據利潤提成。利潤 i 低於或等於10萬元時,獎金可提1...
C語言字元處理經典小程式
首先,說一下原理 用迴圈逐個讀取字元 所有字母均小寫 並儲存到乙個一維字元陣列中直到遇到結束標誌為止。這裡的結束標誌分為三種情況,一是遇到換行符,二是超過了預設的句子長度 這裡設為200 三則是遇到了終止字元 句號.問號?感嘆號 然後再用乙個迴圈搜尋陣列,找到最後乙個單詞的起始位置,列印這個單詞。重...