关于链表的理解( 二 )


       scanf("%d",&num); 
    } 
//    头插法   逆序插法 
//    while(num!=-1)
//    {
//        p=(struct ListNode*)malloc(sizeof(struct ListNode));
//        p->val=num;
//        if(head==NULL)
//        {
//            head=p;
//        }
//        else
//        {
//           p->next=head;
//           head=p;    
//        }
//    } 
    tail->next=NULL//用p->next也行 这是尾插法 
    return head;//返回链表头指针                              

②链表节点的插入
 
struct ListNode *insertList(ListNode *head,int index,int num)//index 表示在链表中插入的位置(从1开始)原位置的元素接在其后  num表示要插入的数值
{
    struct ListNode *p=NULL,q;//在此q为虚拟节点 主要方便对链表进行操作 
    int cnt=1;//计数器从1开始计数
    if(head==NULL&&head->next==NULL)//链表为空 返回一个空指针 
    return NULL; 
    if(index==1)//若插在头结点(在此特指链表的第一个节点)的位置
    {
        p=(struct ListNode*)malloc(sizeof(struct ListNode));//给p开辟实际空间 用来储存操作存入的值 
        p->val=num;
        p->next=head; 
        head=p; 
    } 
    else 
    {
        q=head;
        while(q->next!=NULL&&cnt<=index)//对于链表我们通常对当前节点的下一个节点进行操作 
        {
            if(cnt+1<index)//为什么要加一呢?因为表示下一个位置 
            {
                q=q->next; 
            }
            else
            {
                p=(struct ListNode *)malloc(sizeof(struct ListNode));
                p->val=num;
                p->next=q->next;
                q->next=q;    
            }
        }
    }
    if(cnt<index)//如果cnt还是 小于 index 则表明插在链表末尾 
    {
        p=(struct ListNode*)malloc(sizeof(struct ListNode));
        p->val=num;
        p->next=NULL;
        q->next=p;
    } 
    return head;
}   
 
③链表节点的删除
 
struct ListNode *deleteList(struct ListNode *head,int num)//执行删除节点val值为num的操作
{
    struct ListNode *p=NULL,*q=NULL;//p,q均为辅助指针 不给他们开辟实际空间 
    if(head->val==num)//若删除节点为头结点 
    {
           p=head;
           head=head->next;
           free(p);
    } 
    else//若删除节点为除头结点外的其他节点 
    {
        p=head;
        while(p->next!=NULL)
        {
            if(p->next->val==num)
            {
                q=p->next;
                p->next=p->next->next;
                free(q);    
            } 
            else
            {


推荐阅读