单链表头插法

/*
头插法定义链表 

*/

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
/*
当使用数据结构体类型时
struct data{//学生类型 
    double name;//姓名 
    int num;//学号 
    int math;//分数 
}
*/
 
using namespace std;
struct Node{
    int data;
    struct Node*next;
     
}; 
struct Node*createList(){//创建链表 
    struct Node*headNode=(struct Node*)malloc(sizeof(struct Node));//创建动态存储 
    //headNode 成为的结构体变量
    //变量前必须初始化 
    headNode->data=1;//头结点初始化,开始时也可以不给初始化
    headNode->next=NULL;
    return headNode; 
}
struct Node*createList(int data){//创建节点 ,创建节点的数据是多少————data 
    struct Node*newNode=(struct Node*)malloc(sizeof(struct Node));
    newNode->data=data;
    newNode->next=NULL;
    return newNode;
    
}
void printList(struct Node*headNode){//打印链表 ,打印哪一个链表(eg.打印headNode为头节点的链表) 
    struct Node*pMove=headNode->next;
    while(pMove){
        cout<<pMove->data;
        pMove=pMove->next;
    }
    cout<<"\n";
}
void insertNodeByHead(struct Node*headNode,int data){//插入节点 
//插入到哪一个链表(headNode为头节点的链表,插入的数据)
//1创建插入的节点
    struct Node*newNode=createList(data);
    newNode->next=headNode->next;
    headNode->next=newNode;     

void deleteNodeByAppoin(struct Node*headNode,int posData){//删除节点
/*
删除节点以指定位置删除,指定位置为对应的数data 
*/  
    struct Node*posNode=headNode->next;
    struct Node*posNodeFront=headNode;//PosNode的上一个节点 
    if(posNode==NULL)cout<<"NULL!!!"<<endl;
    else{
        while(posNode->data!=posData){
            posNodeFront=posNode;
            posNode=posNodeFront->next;
            if(posNode==NULL){
                cout<<"END!!!"<<endl;
                return; 
            }
        }
        posNodeFront->next=posNode->next;
        free(posNode);
    }
    
    
    


int main(){
    struct Node*list=createList();
    insertNodeByHead(list,1);
    insertNodeByHead(list,2);
    insertNodeByHead(list,3);
    insertNodeByHead(list,4);
    /*
    当使用数据结构体时 
        insertNodeByHead(list,名字,学号,分数);
    */ 
    printList(list); 
    deleteNodeByAppoin(list,2);//数据结构体时改变 
    printList(list);
    system ("pause");
    return 0; 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值