单链表

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

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

运行结果:

          

posted @   xshang  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示