鍊錶 C 鍊錶建立 刪除 排序,合併

2021-07-15 04:59:59 字數 1125 閱讀 3975

實現c++鍊錶的建立、刪除、排序、合併(保持單調不減)

題目:建立鍊錶、對鍊錶進行排序、合併兩個排序的鍊錶(保持單調不減)

合併思路:

方法1:如果將兩鍊錶頭尾相接後再整體排序,複雜度太高。因此可以利用鍊錶已經排好序的特點進行逐步合併。用兩個指標p1、p2指向兩煉表頭結點head1、head2,並比較,顯然,值小的為合併鍊錶的頭結點head,假如p1值較小,p1=head, p1後移,再與p2比較,值小的併入合併鍊錶,並且指標加1,依次類推,直到某乙個鍊錶為空後,可以直接將另一鍊錶的剩餘元素一起併入合併鍊錶。注意對空鍊錶的處理。

方法2:如果將每一次的p1、p2都使視作兩個鍊錶的頭結點,便可以用遞迴來實現。

完整**:

#includeusing namespace std;

struct listnode

;listnode *buildlist()//鍊錶建立,分配記憶體

if(head==null)

return 0;

p->next=null;

return head;

}void deletelist(listnode* phead)//鍊錶刪除,釋放記憶體

}listnode* sort(listnode* phead)//鍊錶排序

} }return phead;

}listnode* merge(listnode* phead1, listnode* phead2)//方法1:非遞迴

else

p=phead;

while(p1!=null && p2!=null)//逐步合併

else

p=p->next;

} if(p1==null)//有乙個鍊錶為空時,另乙個鍊錶剩餘部分全部併入合併鍊錶

p->next=p2;

else

p->next=p1;

return phead;

}listnode* merge(listnode* phead1, listnode* phead2)//方法2:遞迴

else

phead->next=merge(phead1,phead2);

return phead;

}int main()//主程式

cout<

C 合併鍊錶

合併2個遞增鍊錶,使得合併後仍保持遞增順序 mergelist.cpp 合併2個排序的鍊錶,2個遞增的排序鍊錶,合併這2個使得新煉表中的結點仍是按照遞增順序排列的 include include include list.h using namespace std listnode mergelis...

C 鍊錶合併

問題描述 兩個非降序鍊錶的並集,例如將鍊錶1 2 3 和 2 3 5 並為 1 2 3 5,只能輸出結果,不能修改兩個鍊錶的資料。輸入形式 第一行首先是資料的個數,然後是第乙個鍊錶的各結點值,以空格分隔。第二行首先也是資料的個數,然後是第二個鍊錶的各結點值,以空格分隔。輸出形式 合併好的鍊錶,以非降...

鍊錶(鍊錶建立)

先找到了一些與單鏈表相關的概念 2.指標域 ai元素儲存指向後繼元素儲存位置的資訊 3.結點 包含資料域和指標域 4.單鏈表 每個結點只包含乙個指標域的線性表 5.頭指標 要素 鍊錶中第乙個結點的儲存位置 線性表最後乙個結點指標為空 6.頭結點 非要素 單鏈表第乙個結點前附設乙個結點 其指標域指向第...