单链表的建立,反序,插入,删除
2013-03-29 17:35
162 查看
#include <stdio.h>
#include <malloc.h>
typedef struct _node
{
int data;
struct _node *next;
}Node,*pNode;
pNode headnode = NULL;
void creatnode()
{
pNode current,head;
int temp = 0;
if(headnode == NULL)
{
headnode = (pNode)malloc(sizeof(Node));
printf("sizeof(_node)=%d\n",sizeof(Node));
}
else
{
printf("create bad\n");
return;
}
if(headnode == NULL)
{
printf("malloc error\n");
return;
}
else
{
headnode->data = 0;
}
head = headnode;
head->next = NULL;
for(temp = 0;temp < 4;temp ++)
{
current = (pNode)malloc(sizeof(Node));
if(!current)
{
printf("current malloc error\n");
return;
}
current->data = temp;
current->next = NULL;
head->next = current;
headnode->data ++;
head = current;
}
}
void printNode(pNode pnode)
{
pNode tempnode;
tempnode = pnode;
while(tempnode)
{
printf("node->data=%d\n",tempnode->data);
//printf("node addr=%x,next addr=%x\n",(unsigned int)tempnode,(unsigned int)tempnode->next);
tempnode = tempnode->next;
}
}
void invertNode(pNode pnode)
{
pNode prenode = NULL;
pNode current;
pNode pnext;
current = pnode;
while(current)
{
pnext=current->next;
if(pnext == NULL)
headnode = current;
current->next = prenode;
prenode = current;
current = pnext;
}
}
void appendToEnd(pNode pnode)
{
pNode tempnode = headnode;
while(tempnode)
{
tempnode = tempnode->next;
if(tempnode->next == NULL)
{
tempnode->next = pnode;
break;
}
}
}
void deleteNode(int data)
{
pNode tempnode = headnode;
pNode pnext = NULL;
if(tempnode->data == data)
{
headnode = headnode->next;
free(tempnode);
return;
}
while(tempnode)
{
pnext = tempnode->next;
if(pnext->data == data)
{
tempnode->next = pnext->next;
free(pnext);
break;
}
tempnode = pnext;
}
}
void main()
{
//pNode addnode = (pNode)malloc(sizeof(Node));
//addnode->next = NULL;
//addnode->data = 20;
creatnode();
printNode(headnode);
//invertNode(headnode);
//printNode(headnode);
//appendToEnd(addnode);
deleteNode(2);
printNode(headnode);
deleteNode(4);
printNode(headnode);
}
#include <malloc.h>
typedef struct _node
{
int data;
struct _node *next;
}Node,*pNode;
pNode headnode = NULL;
void creatnode()
{
pNode current,head;
int temp = 0;
if(headnode == NULL)
{
headnode = (pNode)malloc(sizeof(Node));
printf("sizeof(_node)=%d\n",sizeof(Node));
}
else
{
printf("create bad\n");
return;
}
if(headnode == NULL)
{
printf("malloc error\n");
return;
}
else
{
headnode->data = 0;
}
head = headnode;
head->next = NULL;
for(temp = 0;temp < 4;temp ++)
{
current = (pNode)malloc(sizeof(Node));
if(!current)
{
printf("current malloc error\n");
return;
}
current->data = temp;
current->next = NULL;
head->next = current;
headnode->data ++;
head = current;
}
}
void printNode(pNode pnode)
{
pNode tempnode;
tempnode = pnode;
while(tempnode)
{
printf("node->data=%d\n",tempnode->data);
//printf("node addr=%x,next addr=%x\n",(unsigned int)tempnode,(unsigned int)tempnode->next);
tempnode = tempnode->next;
}
}
void invertNode(pNode pnode)
{
pNode prenode = NULL;
pNode current;
pNode pnext;
current = pnode;
while(current)
{
pnext=current->next;
if(pnext == NULL)
headnode = current;
current->next = prenode;
prenode = current;
current = pnext;
}
}
void appendToEnd(pNode pnode)
{
pNode tempnode = headnode;
while(tempnode)
{
tempnode = tempnode->next;
if(tempnode->next == NULL)
{
tempnode->next = pnode;
break;
}
}
}
void deleteNode(int data)
{
pNode tempnode = headnode;
pNode pnext = NULL;
if(tempnode->data == data)
{
headnode = headnode->next;
free(tempnode);
return;
}
while(tempnode)
{
pnext = tempnode->next;
if(pnext->data == data)
{
tempnode->next = pnext->next;
free(pnext);
break;
}
tempnode = pnext;
}
}
void main()
{
//pNode addnode = (pNode)malloc(sizeof(Node));
//addnode->next = NULL;
//addnode->data = 20;
creatnode();
printNode(headnode);
//invertNode(headnode);
//printNode(headnode);
//appendToEnd(addnode);
deleteNode(2);
printNode(headnode);
deleteNode(4);
printNode(headnode);
}
相关文章推荐
- C++ 单链表的建立,插入数值,删除数值,排序,遍历,和分割操作
- 单链表的各种操作(建立,查找,删除,插入,归并等)
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 单链表的建立、测长、打印、删除节点、插入节点
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- 使用JAVA实现单链表的建立、测长、打印、删除、插入、排序、逆置
- 数据结构与算法分析之单链表的建立,插入和删除操作。
- 实现一个单链表的建立、测长、打印、删除、插入
- 单链表的建立,插入,显示,查找删除以及反转
- 单链表的建立、插入、删除、遍历
- 单链表的建立、求长、插入、删除、输出和释放 (带头结点)
- 单链表(建立、插入、删除、打印)
- 单链表的定义建立插入删除查询
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- 单链表的基本操作的实现(建立、插入、删除、逆序)
- 单链表的建立,插入,删除,逆置
- 单链表的初始化,建立,插入,查找,删除。
- 【数据结构】单链表的建立,测长,打印,删除,插入, 排序, 逆置
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置(转)