#include <stdio.h>
//设计节点结构
typedef struct Node
{
int data;
struct Node *pNext;
}NODE, *pNODE;
int GetLengthSgLinkList(pNODE pHead)
{
int length = 0;
pNODE pt = pHead->pNext;
while (pt != NULL)
{
length++;
pt = pt->pNext;
}
return length;
}
int InsertEleSgLinkList(pNODE pHead, int pos, int data)
{
pNODE pt = NULL, p_new = NULL;
if (pos > 0 && pos < GetLengthSgLinkList(pHead) + 2)
{
p_new = (pNODE)malloc(sizeof(NODE));
if (NULL == p_new)
{
exit(0);
}
p_new->data = data;
while (1)
{
pos--;
if (0 == pos)
break;
pHead = pHead->pNext;//假设插入位置是一,此时pHead指向第一个节点的地址
}
pt = pHead->pNext;//
pHead->pNext = p_new;
p_new->pNext = pt;
return 1;
}
else
return 0;
}
void TraverseSgLinkList(pNODE pHead)
{
pNODE pt = pHead->pNext;
while (pt != NULL)
{
printf("%d ", pt->data);
pt = pt->pNext;
}
putchar('\n');
}
void main(){
int i, length, data;
pNODE p_new = NULL, pTail = NULL;
pNODE pHead = (pNODE)malloc(sizeof(NODE));//创建头结点
if (NULL == pHead)
{
printf("内存分配失败!\n");
exit(0);
}
pHead->data = 0;//给头结点赋值 这个值可以随意 不是有效值
pHead->pNext = NULL;//头结点指针初始化位空
pTail = pHead;//使用pTail当中间变量 给不同的节点赋值
length=5;
data=9000;
for (i=1; i<length+1; i++)
{
p_new = (pNODE)malloc(sizeof(NODE));
if (NULL == p_new)
{
exit(0);
}
p_new->data = data;//新创建节点data赋值
p_new->pNext = NULL;//当前节点应当保存的是下一个节点的地址,由于下一个节点的地址还没有产生,所以应给null
pTail->pNext = p_new;//将当前节点的地址传给上一个节点保存
pTail = p_new;//改变pTail的地址指向,使其指向p_new这个节点,以便在下次循环的时候给p_new节点应该指向的节点赋值
data++;
}
TraverseSgLinkList(pHead);
InsertEleSgLinkList(pHead, 2, 2);
pNODE pt = pHead->pNext;
while (pt != NULL)
{
printf("%d ", pt->data);
pt = pt->pNext;
}
putchar('\n');
}