单链表
遇到的问题:主要还是指针问题,还有算法思想要清晰。
在删除时对于相同的数只能删除一次。不知什么原因。在GCC上运行却可以删除相同的数多次。
代码:
#include <iostream> #include <cstdlib> using namespace std; typedef struct ListNode { int data; struct ListNode *next; }*List; void createList(List &list,int arr[],int n) { List head,node; list=(List)malloc(sizeof(List)); list->next=NULL; head=list; for(int i=0;i<n;i++) { node=(List)malloc(sizeof(List)); if(!node) cout<<"内存分配失败."<<endl; else { node->data=arr[i]; node->next=head->next; head->next=node; } } } void insertListNode(List list,int elem) { List node,head,pre; node=(List)malloc(sizeof(List)); node->data=elem; node->next=NULL; head=list->next; pre=list; while(head) { if(head->data>elem) { pre=head; head=head->next; if(head==NULL) { pre->next=node; break; } } else { node->next=pre->next; pre->next=node; break; } } } void deleteListNode(List list,int elem) { List head,pre,node; head=list->next; pre=list; while(head) { if(head->data==elem) { node=head; pre->next=head->next; break; } else { pre=head; head=head->next; if(head->next==NULL) { if(head->data==elem) pre->next=NULL; free(head); break; } } } } void merge(List list1,List list2) { List head=list1->next; while(head) { head=head->next; if(head->next==NULL) break; } head->next=list2->next; } void display(List list) { List head; head=list->next; while(head) { cout<<head->data<<"->"; head=head->next; } cout<<endl; } int main() { List list,list2; int arr[]={1,5,74,3,5,8}; int arr2[]={4,38,45,2}; createList(list,arr,6); createList(list2,arr2,4); cout<<"display list:"; display(list); insertListNode(list,23); cout<<"display list:"; display(list); insertListNode(list,6); cout<<"display list:"; display(list); deleteListNode(list,5); cout<<"display list:"; display(list); merge(list,list2); cout<<"display list:"; display(list); return 0; }
运行结果: