单链表

       遇到的问题:主要还是指针问题,还有算法思想要清晰。

在删除时对于相同的数只能删除一次。不知什么原因。在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;
}

运行结果:

          

原文地址:https://www.cnblogs.com/xshang/p/3022547.html