只要知道指针的作用就课以简单理解:
#include<iostream>
using namespace std;
struct node
{
int date;
node *next;
}
node *p,*r,*head;
int main()
{
int x;
cin >> x;
head = new node;//申请头结点
while(x!=0)//读入不等于0的数
{
p = new node;//申请一个新的结点
p->date = x;
p->next=NULL:
r->next = p;//把新节点与前面的节点相连
r = p;//为指针向后移动
cin >> x;
}
p = head->next;//头指针没有数据,所以从第一个开始就好了
while(p->next!=NULL)//因为最后一个指针是空指针。
{
cout<<p->date<<" ";
p=p->next;
}
cout<<p->date<<endl;//输出最后接结点的值也可以用do while语句
return 0;
}
单链表的操作
1,查找满足一定条件的数据,
p = head->next;//头指针没有数据,所以从第一个开始就好了
while(p->next!=NULL)//因为最后一个指针是空指针。
{
if();//写满足条件的数据,并处理它;
p=p->next;
}
2,取出链表中的第i个数据;
p = head->next;//头指针没有数据,所以从第一个开始就好了
while(p->next!=NULL&&j<i)//因为最后一个指针是空指针。
{
p=p->next;
j++;
}
3,插入一个结点单链表中
//核心代码
void insert(node *head,int i,int x)//插入元素到第i个元素之前
{
node *p,*s;
int j;
p = head;
j = 0;
while( p->next != NULL && j < i-1)
{
p = p->next;
j++;
}
if(p == NULL)//也就是到尾结点也没有找到
puts("no answer!");
else
{
s = new node;
s->date = x;
s->next = p->next;//交换地址插入
p->next = s;
}
}
4,删除单链表的元素
//将上面添加结点的else换成如下代码
s = p->next;//将结点拿出
p->next = s->next;//p->next = p->next->next;//将链条和成一天去掉一定的位置的结点
free(s);//释放空间,
5,长度的遍历加1
就行了