首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 鏈表合併去重:有序鏈表合併時跳過重複值

     編輯:程式設計疑難解答

問題

合併兩個遞增鏈表,結果鏈表不包含重複值。

修正合併邏輯

if (h1->a > h2->a) {
    p->next = h2; p = p->next; h2 = h2->next;
} else if (h1->a < h2->a) {
    p->next = h1; p = p->next; h1 = h1->next;
} else { // 相等,只取一個,另一個指針後移
    p->next = h2; p = p->next;
    h2 = h2->next;
    h1 = h1->next; // 跳過重複值
}

打印前調整

合併函數返回帶頭結點的鏈表,打印前需跳過頭結點:

h = h->next; // 跳過頭結點
print(h);

完整流程

  1. 創建兩個有序鏈表(含頭結點)。
  2. 合併時比較數值,相等只鏈接一次並雙指針後移。
  3. 處理剩餘節點(同理去重)。
  4. 打印時跳過頭結點。

邏輯清晰,結果鏈表有序且無重複。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved