单链表的操作
2015-07-27 00:35
295 查看
#include<stdio.h>
#include<stdlib.h>
typedef struct ListNode{
int value;
ListNode* pNext;
}Node;
Node* head=NULL;
//创建
bool create_node(){
//动态分配内存
head=(Node*)malloc(sizeof(Node));
//判断head是否为空
if(head==NULL){
return false;
}
else{
head->value=0;
head->pNext=NULL;
return true;
}
}
//添加
bool add_node(Node* node){
if(head==NULL){
return false;
}
Node* q=head;
Node* p=head->pNext;
while(p!=NULL){
q=p;
p=p->pNext;
}
q->pNext=node;
node->pNext=NULL;
return true;
}
//删除节点
bool dele_node(int index){
if(head==NULL){
return false;
}
int length=0;
Node* p=head;
while(p->pNext!=NULL){
length++;
p=p->pNext;
}
if(index>length){
return false;
}else{
Node* q=head;
p=q;
for(int i=0;i<index;i++){
q=p;
p=p->pNext;
}
Node* t=p->pNext;
q->pNext=t;
free(p);
return true;
}
}
//逆序
void reverseNodeList()
{
if(NULL == head)
{
return;
}
//如果链表长度为1
if(head->pNext == NULL)
{
return;
}
Node* current=head->pNext;
Node* p=head;
Node* q=head;
while(current->pNext!=NULL){
p=current->pNext;
current->pNext=p->pNext;
p->pNext=head->pNext;
head->pNext=p;
}
// Node* p = head->pNext;
// Node* q = p->pNext;
// Node* t = NULL;
// while(NULL != q)
// {
// t = q->pNext;
// q->pNext = p;
// p = q;
// q = t;
// }
// //p->pNext= NULL;
// head->pNext->pNext = NULL;
// head->pNext = p;
}
void Print_list(){
Node* p=head;
while(p->pNext!=NULL){
p=p->pNext;
printf("%-2d",p->value);
}
}
int main(){
create_node();
for(int i=1;i<=10;i++){
Node* node_i=(Node*)malloc(sizeof(Node));
node_i->value=i;
node_i->pNext=NULL;
add_node(node_i);
}
reverseNodeList();
//dele_node(1);
//dele_node(2);
Print_list();
return 0;
}
#include<stdlib.h>
typedef struct ListNode{
int value;
ListNode* pNext;
}Node;
Node* head=NULL;
//创建
bool create_node(){
//动态分配内存
head=(Node*)malloc(sizeof(Node));
//判断head是否为空
if(head==NULL){
return false;
}
else{
head->value=0;
head->pNext=NULL;
return true;
}
}
//添加
bool add_node(Node* node){
if(head==NULL){
return false;
}
Node* q=head;
Node* p=head->pNext;
while(p!=NULL){
q=p;
p=p->pNext;
}
q->pNext=node;
node->pNext=NULL;
return true;
}
//删除节点
bool dele_node(int index){
if(head==NULL){
return false;
}
int length=0;
Node* p=head;
while(p->pNext!=NULL){
length++;
p=p->pNext;
}
if(index>length){
return false;
}else{
Node* q=head;
p=q;
for(int i=0;i<index;i++){
q=p;
p=p->pNext;
}
Node* t=p->pNext;
q->pNext=t;
free(p);
return true;
}
}
//逆序
void reverseNodeList()
{
if(NULL == head)
{
return;
}
//如果链表长度为1
if(head->pNext == NULL)
{
return;
}
Node* current=head->pNext;
Node* p=head;
Node* q=head;
while(current->pNext!=NULL){
p=current->pNext;
current->pNext=p->pNext;
p->pNext=head->pNext;
head->pNext=p;
}
// Node* p = head->pNext;
// Node* q = p->pNext;
// Node* t = NULL;
// while(NULL != q)
// {
// t = q->pNext;
// q->pNext = p;
// p = q;
// q = t;
// }
// //p->pNext= NULL;
// head->pNext->pNext = NULL;
// head->pNext = p;
}
void Print_list(){
Node* p=head;
while(p->pNext!=NULL){
p=p->pNext;
printf("%-2d",p->value);
}
}
int main(){
create_node();
for(int i=1;i<=10;i++){
Node* node_i=(Node*)malloc(sizeof(Node));
node_i->value=i;
node_i->pNext=NULL;
add_node(node_i);
}
reverseNodeList();
//dele_node(1);
//dele_node(2);
Print_list();
return 0;
}
相关文章推荐
- NOI2015总结
- Linux-nginx-base1
- 黑马程序员------C语言程序 const、static和extren 及内存管理
- [LeetCode] Candy
- AsyncHttpClient
- windows安装 MongoDB 3.0.4
- 如何删除xcode项目中不再使用的图片资源
- 我的前端架构之一--页面作用域
- Vim命令合集
- Maven 中央(或国内)仓库地址
- android ExpandableListView点击哪一条那一条显示,而其他条隐藏的实现办法
- 1.计算机原理实验及实现
- 【jQuery】复选框的批量处理:全选、非全选
- hihocoder 1191 小W与网格
- vim常用命令总结
- POJ 3071 Football 【概率DP】
- Mac OS X开机启动Path had bad permissions错误解决方案
- 数据结构(二):线性表的使用原则以及链表的应用-稀疏矩阵的三元组表示
- sort
- window中的常见方法