单链表
遇到的问题:主要还是指针问题,还有算法思想要清晰。
在删除时对于相同的数只能删除一次。不知什么原因。在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;
}
运行结果:


浙公网安备 33010602011771号