一、單鏈表反轉
linklist reserve_l(linklist l)
}
上面這一種是 不算表頭的 表頭里沒有資料
下面這一種是表頭帶資料,表頭也要丟到最後
listnode* reverselist(listnode* phead)
return preversehead;
}
二、判斷單鏈表是否有環
bool isloop(node *head)
return false;
}
三、判斷鍊錶中的環的入口
listnode* enterofloop(listnode* phead)
listnode *pfast=phead->next->next;
lisenode *pslow=phead->next;
while(pfast!=pslow)
else return null;
} pfast=phead;
while(pfast!=pslow)
return pfast;
}
四、合併2個有序鍊錶
遞迴操作:
node mergelist(node list1,node list2)
else
resultnode->next=mergelist(list1,list2);
return resultnode;
}
非遞迴寫法
listnode* merge(listnode* phead1, listnode* phead2)
pre1 = p1;
p1 = p1->next;
}if(p2)
pre1->next = p2;
return phead1;
}
五、刪除鍊錶中重複出現的結點
(1)重複的全部刪除
pre指標指向一定不重複的結點,last是工作指標用於遍歷。
listnode* deleteduplication(listnode* phead)
pre->next = last->next;//標誌處
last = last->next;
}else
}return head->next;
}
(2)重複的結點保留一次
public static node deletedup3(node x)
if (tmp->val == tmp->next->val) else
}return x;
}
遞迴解法
public static node deletedup4(node head)
六、找出兩個鍊錶的第乙個公共結點
listnode* findfirstcommonnode( listnode* phead1, listnode* phead2)
p = phead2;
while(p != null)
p = p->next;
}return null;
}
最後一提,乙個綜合的演算法題目
乙個鍊錶假設第乙個節點定位下標1,第二個為2,下標為奇數的結點是公升序排序,偶數的結點是降序排序,如何讓整個鍊錶有序?
第一步 拆分成2個鍊錶儲存
第二步 其中乙個鍊錶進行反轉
第三步 合併2個有序鍊錶。
這裡不細說了 上面都有提到過,讀者們自行編碼除錯吧!
鍊錶程式設計練習
深刻感覺,基礎很重要,閒暇時間,做簡單鍊錶程式設計練習。ifndef list h define list h include include typedef struct linknodelist linknode linknode linklistcreate const intn linkno...
演算法練習 鍊錶求和
題目 給定兩個用鍊錶表示的整數,每個節點包含乙個數字。這些數字是反向存放的,也就是個位排在鍊錶首部。編寫函式對這兩個整數求和,並用鍊錶形式返回結果。示例 輸入 7 1 6 5 9 2 即617 295輸出 2 1 9,即912個人思路 因為兩個鍊錶低位在前,所以直接遍歷兩個鍊錶的值進行相加即可,加法...
演算法練習之環形鍊錶
1.環形鍊錶 給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數pos來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果pos是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2...