首页 > 代码库 > 2016 7 25 链表
2016 7 25 链表
#include<stdio.h>
#include<stdlib.h>
/*
usingnamespacestd;
structNode
{
int data;//数据域
struct Node*next;//指针域
};
/*
Create
*函数功能:创建链表.
*输入:各节点的data
*返回值:指针head
*//*
Node*Create()
{
int n=0;
Node*head,*p1,*p2;
p1=p2=new Node;
cin>>p1->data;
head=NULL;
while(p1->data!=0)
{
if(n==0)
{
head=p1;
}
else
p2->next=p1;
p2=p1;
p1=new Node;
cin>>p1->data;
n++;
}
p2->next=NULL;
return head;
}
/*
insert
*函数功能:在链表中插入元素.
*输入:head链表头指针,p新元素插入位置,x新元素中的数据域内容
*返回值:无
void insert(Node*head,int p,int x)
{
Node*tmp=head;//for循环是为了防止插入位置超出了链表长度
for(inti=0;i<p;i++)
{
if(tmp==NULL)
return -1;
if(i<p-1)
tmp=tmp->next;
}
Node*tmp2=new Node;
tmp2->data=http://www.mamicode.com/x;
tmp2->next=tmp->next;
tmp->next=tmp2;
}
*/
/*
del
*函数功能:删除链表中的元素
*输入:head链表头指针,p被删除元素位置
*返回值:被删除元素中的数据域.如果删除失败返回-1
intdel(Node*head,int p)
{
Node*tmp=head;
for(inti=0;i<p;i++)
{
if(tmp==NULL)
return -1;
if(i<p-1)
tmp=tmp->next;
}
int ret=tmp->next->data;
tmp->next=tmp->next->next;
return ret;
}
void print(Node*head)
{
for(Node*tmp=head;tmp!=NULL;tmp=tmp->next)
printf("%d",tmp->data);
printf("\n");
}
int main()
{
Node*head;
head=newNode;
head->data=http://www.mamicode.com/-1;
head->next=NULL;
return 0;
}
*/
//例子
#include<iostream>
//#define NULL 0
struct student
{
long num;
struct student*next;
};
int main()
{
int i,n;
student*p=(struct student*)malloc(sizeof(struct student));
student*q=p;
printf("输入几个值");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&(q->num));
q->next=(struct student*)malloc(sizeof(struct student));
q=q->next;
}
printf("值第几个");
int rank;
scanf("%d%d",&(q->num),&rank);
student*w=p;
for(i=1;i<rank-1;i++)
{
w=w->next;
}
q->next=w->next;
w->next=q;
for(i=1;i<=n+1;i++)
{
printf("%d",p->num);
p=p->next;
}
return 0;
}//指针后移麻烦链表形式循环链表 */
2016 7 25 链表