线性单链表

#include<iostream>
using namespace std;
struct student
{
    long num;
    float score;
    struct student *next;
};

int n;
//初始化一个链表
void create(struct student **head)
{
    struct student *p1,*p2;
    n = 0;
    p1 = p2 = new struct student;
    cin>>p1->num;
    cin>>p1->score;
    while (p1->num != 0 )
    {
        n = n+1;
        if (n == 1)
        {
            *head = p1;
        }
        else
        {
            p2->next = p1;
        }
        p2 = p1;
        p1 = new struct student;
        cin>>p1->num;
        if (p1->num == 0 )
        {
            break;
        }
        cin>>p1->score;
    }
    p2->next = NULL;
}
//找到第i个元素
bool find(struct student **head, struct student **ptarget,int i)
{
    struct student *p = *head;
    int n = 1;
    while (p && (n <i) )
    {
        p = p->next;
        n++;
    }

    if (p && (n == i))
    {
        *ptarget = p;
        return true;
    }
    else
        return false;
}
//在第i个节点后插入node
bool insert(struct student **head,struct student *node ,int i)
{
    struct student *pre;
    if (find(head,&pre,i))
    {
        node->next = pre->next;
        pre->next = node;
        return true;
    }
    return false;
}
//删除第i个节点
bool del(struct student **head,int i)
{
    struct student *pre,*target;
    if (find(head,&pre,i-1)&&find(head,&target,i))
    {
        pre->next = target->next;
        delete target;
        return true;
    }
    return false;
}
void print(struct student *head)
{
    while (head)    
    {
        cout<<head->num<<"  "<<head->score<<endl;
        head = head->next;
    }
}
int main()
{
    struct student *head ,*target=0;
    create(&head);
    print(head);
    
    find(&head,&target,2);
    if (target)
    {
        cout<<"find !  "<<target->num<<"  "<<target->score <<endl;
    }
    cout<<"--------insert--------------------------------------------"<<endl;
    struct student *node = new struct student;
    node->num = 20;
    node->score=100;
    insert(&head,node,2);
    
    print(head);
    cout<<"----------del------------------------------"<<endl;
    del(&head,2);
    print(head);
    cout<<""<<endl;
    return 0;
}

另:

 1 #include "iostream"
 2 using namespace std;
 3 
 4 typedef struct LinkList
 5 {
 6     int datainfo;
 7     LinkList *pnext;
 8 }LinkList;
 9 
10 //动态创建n个节点
11 void initial(LinkList **head,int n)
12 {
13     
14     LinkList *p1,*p2;
15     if (n<=0)
16     {
17         cout<<"please input a positive number !"<<endl;
18         return;
19     }
20     *head = p1 =p2 = new LinkList;
21     cout<<"input datainfo:  ";
22     cin>>p2->datainfo;
23     cout<<endl;
24     for (int i = 0 ; i < n -1;i++)
25     {
26         p2 = new LinkList;
27         cout<<"input datainfo:  ";
28         cin>>p2->datainfo;
29         cout<<endl;
30         p1->pnext = p2;
31         p1 = p2;
32     }
33     p2->pnext=0;//不设置会抛出异常
34 }
35 //查找第i个结点
36 bool find(LinkList **head,LinkList **ptarget,int i)
37 {
38     LinkList *p = *head;
39     int np = 1;
40     while ( (p != NULL) && (np < i) )
41     {
42         p = p->pnext;
43         np++;
44     }
45     
46 //    if (np != i)
47 //    {
48 //        return false;
49 //    }
50     if (p == NULL)
51     {
52         return false;
53     }
54     
55     if (np == i )
56     {
57         *ptarget = p ;
58     }
59     
60     return true;
61 }
62 //在指定的节点后插入node
63 bool insert(LinkList **head,LinkList *node,int i)
64 {
65     LinkList *p =NULL;
66 
67     if (find(head,&p,i))
68     {
69         
70         node->pnext = p->pnext;
71         p->pnext = node;    
72         return true;
73     }
74     else
75         return false;
76 }
77 
78 void print(LinkList *head)
79 {
80     LinkList *p = head;
81     while (p)
82     {
83         cout<<p->datainfo<<endl;
84         p = p->pnext;
85     }
86 }
87 int main()
88 {
89     LinkList *head;
90     initial(&head,5);
91 
92     //LinkList *node = new LinkList;
93     //node->datainfo = 6;
94 //    insert(head,node,1);
95     print(head);
96     return 0;
97 }
View Code
原文地址:https://www.cnblogs.com/yaoxc/p/3303385.html