您的位置:首页 > 其它

单链表的操作

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: