#include "stdafx.h"
#include "stdio.h"
#include <iostream>
using namespace std;
#define MAXSIZE 50
#define swap(a,b) a=a+b;b=a-b;a=a-b;
typedef struct Node{
int data;
struct Node *next;
}LNode;
void Output(Node *p);
void TailOutput(LNode *p);
// 头插入法建链表
LNode* HeadList(LNode *head)
{
int i;
LNode *p,*h;
h = head;
for(i=0;i<5;i++)
{
p = (struct Node*)malloc(sizeof(struct Node));
p->data = i;
p->next = h->next;
h->next = p;//新创建的节点,总是作为第一个节点
}
return head;
}
/*
为了操作方便,总是在链表的第一个结点之前附设一个头结点(头指针)
head指向第一个结点。头结点的数据域可以不存储任何信息(或链表长度等信息)
*/
//尾插入法建链表
LNode* TailList(LNode *Tail)
{
LNode *p,*t;
t = Tail;
int i;
for (i=0;i<10;i++)
{
p = (struct Node*)malloc(sizeof(struct Node));
p->data = i;
t->next = p;
t = t->next;
}
t->next = NULL;
// free(p);
return Tail;
}
/*
向链表中插入一个节点(插入在末尾)
*/
LNode* insertNode(LNode *l,int value)
{
LNode *p,*t;
t=l;
while(t->next!=NULL)
{
t=t->next;
}
p=(struct Node*)malloc(sizeof(struct Node));
p->data=value;
p->next=NULL;
t->next=p;
return l;
}
/*
删除某个节点的值
*/
LNode* DeleteNode(LNode *l,int value)
{
LNode *p,*r;
p=l;
while(p!=NULL)
{
r=p->next;//p指向头节点,而头节点在定义时仅仅是一个节点,因此把头节点的下一个节点(第一个节点)
if (r->data==value)
{
p->next=r->next;
return l;
}
p=p->next;
}
return l;
}
/*
查找某个节点的值
*/
int SearchNode(LNode *l,int pos)
{
LNode *p;
int i=1;
p=l;
while (p->next!=NULL)
{
p=p->next;
if (i==pos)
{
return p->data;
}
i++;
}
return 0;
}
void Output(Node *p)
{
Node *l;
l = p->next;
while(l!=NULL)
{
printf("%d
",l->data);
l = l->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LNode *tmp;
Node *head,*p,*l;
int t;
head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
// tmp = HeadList(head);
//Output(tmp);
tmp = TailList(head);
tmp = insertNode(tmp,5);
tmp = DeleteNode(tmp,6);
Output(tmp);
t = SearchNode(tmp,3);
printf("%d
",t);
getchar();
return 0;
}