#include<stdio.h>
#include<stdlib.h>
typedef int val;
typedef struct node //定义链表形式
{
int val;
struct node * next;
}node, * pnode;
#define LEN sizeof(struct node)
pnode cr() //创建链表
{
int cnt,i,val;
pnode pHead = NULL;
pHead = (pnode) malloc(sizeof(node));
pnode pTail = pHead;
printf("请输入节点的个数:\n");
scanf("%d",&cnt);
for(i=1;i<=cnt;i++)
{
printf("请输入第%d节点的值\n",i);
scanf("%d",&val);
pnode pNew;
pNew = (pnode) malloc(sizeof(node));
pNew->val = val;
pTail->next = pNew;
pTail = pNew;
pNew->next = NULL;
}
return pHead;
}
pnode append(pnode head,val e) //链表尾部添加
{
pnode p,w;
p=head;
while(p->next!=0)
{
p=p->next;
}
w=(pnode)malloc(sizeof(LEN));
w->val=e;
p->next=w;
w->next=NULL;
return head;
}
pnode change(pnode h,int n) //改变链表位于n位置节点的值
{
pnode p=h;
int i=0;
while(i<n && p!=NULL)
{
p=p->next;
i++;
}
if(p!=NULL)
{
puts("input the value ,please:");
scanf("%d",&p->val);
}
else{
puts("node is not exit!");
}
return h;
}
pnode delet(pnode h,int n) //删除位于n位置的节点
{
pnode p=h,w;
int i=0;
while(i<n && p!=NULL)
{
w=p;
p=p->next;
i++;
}
if(p!=NULL)
{
w->next=p->next;
free(p);
}
return h;
}
pnode insert(pnode h,int n,val e) //在n位置插入值为e的节点
{
pnode p=h,w;
int i=0;
while(i<n && p!=NULL)
{
p=p->next;
i++;
}
if(p!=NULL)
{
w=(pnode)malloc(sizeof(LEN));
w->val=e;
w->next=p->next;
p->next=w;
}
return h;
}
void tr(pnode pHead)//链表遍历并输出
{
int i = 1;
pnode p = pHead->next;
while(p != NULL)
{
printf("第%d个节点的值为%d\n",i,p->val);
p = p->next;
i++;
}
}
pnode re(pnode head)//链表逆序
{
pnode p,q,r;
p=head->next;
q=NULL; //为了while下面循环中第一次循环,使原链表头节点下一个节点变为链表尾部
head->next=NULL;//使原链表的头部剥离
while(p!=NULL)
{
r=p->next;
p->next=q;//第一次循环时产生新链表尾部,后面就不是了,因为下面的q=p语句对q赋值
q=p;
p=r;
}
head->next =q;
return head;
}