您的位置:首页 > 编程语言 > C语言/C++

c++ 链表相关

2012-05-02 23:21 106 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ok 1
#define error 0

struct linklist
{
int id;
struct linklist *next;
};

int init_linklist(struct linklist **head);
int insert_linklist(struct linklist *head);
int traver_linklist(struct linklist *head);
int chang_linklist(struct linklist **head);

int main(int argc,char *argv[])
{
int i=0;
struct linklist *head;
init_linklist(&head);
while (i < 5)
{
insert_linklist(head);
i++;
}

traver_linklist(head);

chang_linklist(&head);

traver_linklist(head);
return ok;
}

int init_linklist(struct linklist **head)
{
*head = (struct linklist *)malloc(sizeof(struct linklist));
if (NULL == (*head))
{
printf("init error\n");
return error;
}

memset(*head,0,sizeof(struct linklist));
(*head)->next = NULL;

return ok;
}

int insert_linklist(struct linklist *head)
{
struct linklist *s;
struct linklist *p = head->next;
struct linklist *upper = head;
s = (struct linklist *)malloc(sizeof(struct linklist));
if (NULL == s)
{
printf("init error\n");
return error;
}
memset(s,0,sizeof(struct linklist));
printf("please input the num:\t");
scanf("%d",&s->id);
s->next = NULL;

while ( p != NULL  && p->id <s->id)
{
upper = p;
p = p->next;
}
s->next = p;
upper->next = s;
return ok;
}

int traver_linklist(struct linklist *head)
{
struct linklist *p;
p = head->next ;
while ( p!= NULL)
{
printf("%d--",p->id);
p = p->next;
}
printf("\n");

}

int chang_linklist(struct linklist **head) //实现单链表的就地逆转
{
struct linklist *p = (*head)->next;
struct linklist *q = NULL;
struct linklist *r = NULL;

while (p  != NULL)
{
q = p->next;
p->next = r;
r = p;
p = q;
}

//	free(*head);
//	*head = NULL;

(*head)->next = r;

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