【数据结构day1】链表的基本操作

总结了几个重点:
 1. 头插法关键代码:
	p->next=head->next;
	head->next=p;
 2. 尾插法关键代码:
 	head=tail;
 	s->next=NULL;
 	tail->next=s;
 	tail=s;
  3. 删除元素关键思路:
  	找到q->next为要删除的元素,然后q->next=q->next->next,之后对q->next的节点进行free操作(易漏)

结构体定义:

typedef struct LNode{
    
    
    int data;
    struct LNode *next;
}LNode;

创建节点函数:

LNode *createNode(int x){
    
    
    LNode *p=(LNode *) malloc(sizeof(LNode));
    p->data=x;
    p->next=NULL;
    return p;
};

按值查找函数:

LNode *searchLNode(LNode *p,int x){
    
    
    LNode *t=(LNode*)malloc(sizeof(LNode));
    t=p;
    while(t){
    
    
        if(t->data==x)
            return t;
        else
            t=t->next;
    }
    return NULL;
}

插入节点操作(头插法):

void insertList(LNode *&L,int x){
    
    
    LNode *s;
    s=(LNode*)malloc(sizeof(LNode));
    s->data=x;
    s->next=L->next;
    L->next=s;
}

插入节点操作(尾插法):

void insertList2(LNode *&L,int x){
    
    
    LNode *p ,*s;
    p=L;
    s=(LNode*)malloc(sizeof(LNode));
    s->data=x;
    s->next=NULL;
    p->next=s;
    p=s;
}

删除节点操作:

int searchAndDelete(LNode *&L,int x){
    
    
    LNode *p,*q;
    p=L;
    while(p->next!=NULL){
    
    
        if(p->next->data==x)
            break;
        p=p->next;
    }
    if(p->next==NULL){
    
    
        return 0;
    }
    else
    {
    
    
        q=p->next;
        p->next=p->next->next;
        free(q);
        return 1;
    }

}

打印链表操作:

void printList(LNode *L){
    
    
    LNode *p=L->next;
    while(p){
    
    
        printf("%d",p->data);
        p=p->next;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_51763547/article/details/132111864
今日推荐