关于“单链表”笔记整理
【一】单链表的结构、建立、输出
参考代码:
#include<bits/stdc++.h>
using namespace std;
//(1)定义链表
struct Node{
int data;
Node * next;
};
Node * p,* head, * r;
int main()
{
//输入------------------------------------------------------
int x;
cin>>x; //往链表里存储的第一个数
head=new Node; //申请头结点
r=head; //最开始尾指针指向头结点
while(x!=-1) //没到达结束条件时
{
p=new Node; //申请第一个结点
p->data=x; //给第一个结点存储数据
p->next=NULL; //设置第一个结点的指针域
r->next=p; //把新节点链接到头结点
r=p; //尾指针指向第一个结点
cin>>x;
}
//输出------------------------------------------------------------------
p=head->next; //从第一个结点开始,头结点没有存储数据
while(p->next!=NULL) //如果不是最后一个结点,则继续访问下一个结点
{
cout<<p->data<<" ";
p=p->next;
}
cout<<p->data<<endl; //输出最后一个结点的数据
}
【二】查找数据域满足一定条件的结点
(1)找到第一个就结束:
p=head->next;
while(p->data!=x)&&(p->next!=NULL) //一直往下找的条件
{
p=p->next;
}
if(p->data==x)
{
找到了处理;
}
else
{
输出不存在;
}
(2)找到所有满足条件的值:
p=head->next;
while(p->next!=NULL)
{
if(p->data==x) //找到了处理
p=p->next; //继续查找下一个
}
【三】取出单链表的第i个结点的数据域:
void get(Node *head,int i)
{
Node * p;int j;
j=1;
p=head->next;
while((p!=NULL)&&(j<i))
{
p=p-next;
j=j+1;
}
if((p!=NULL)&&(j==i))
{
cout<<p-data;
}
else{ cout<<"不存在";}
【四】插入一个结点在单链表中:插入x在第i个元素之前
void insert(Node * head,int x,int i)
{
Node * p,* s;
int j;
p=head->next;
j=0;
whlie((p->next!=NULL) && (j<i-1)) //寻找第i-1个结点,插在它的后面,前i-1个数都不满足,则往后走
{
p=p->next;
j++;
}
if(p->next==NULL) {cout<<"不存在";}
else
{
s=new Node;
s->data=x;
s->next=p->next;
p-next=s;
}
}
【四】阐述单链表中的第i个结点:删除第i个数
void delete(Node *head,int i)
{
Node *p,*s; //假设s是删除结点的后继结点
int j;
p=head->next;
j=0;
while((p->next!=NULL) && (j<i-1)
{
p=p->next;
j++;
}
if(p->next==NULL) cout<<"不存在”;
else
{
s=p-next;
p->next=p->next->next;
}
}
【五】求单链表的实际长度
int len(Node *head)
{
int n=0;
p=head->next;
while(p-next!=NULL)
{
p=p->next;
n=n+1;
}
reutn n;
}
浙公网安备 33010602011771号