實現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.頭結點 非要素 單鏈表第乙個結點前附設乙個結點 其指標域指向第...