曲径通幽论坛
标题:
链表反转
[打印本页]
作者:
beyes
时间:
2009-7-27 21:36
标题:
链表反转
code:
#include <stdio.h>
#include <stdlib.h>
struct
llist
{
int
num
;
struct
llist
*
next
;
};
typedef
struct
llist
node
;
typedef
node
*
llink
;
/*-----------*/
/* 链表输出 */
/*-----------*/
void
printllist
(
llink
ptr
)
{
while
(
ptr
!=
NULL
)
{
printf
(
"[%d]"
,
ptr
->
num
);
ptr
=
ptr
->
next
;
}
printf
(
"
\n
"
);
}
/*-----------*/
/* 链表创建 */
/*-----------*/
llink
createllist
(
int
*
array
,
int
len
)
{
llink
head
;
/*链表开始指针*/
llink
ptr
,
ptr1
;
int
i
;
/*创建第一个结点*/
head
=
(
llink
)
malloc
(
sizeof
(
node
));
if
(
!
head
)
/*检查指针*/
return
NULL
;
head
->
num
=
array
[
0
];
/*创建结点内容*/
head
->
next
=
NULL
;
/*设置指针初值*/
ptr
=
head
;
/*ptr指向链表开始*/
for
(
i
=
1
;
i
<
len
;
i
++
)
{
/*创建其它结点循环*/
ptr1
=
(
llink
)
malloc
(
sizeof
(
node
));
if
(
!
ptr1
)
return
NULL
;
ptr1
->
num
=
array
[
i
];
/*创建结点内容*/
ptr1
->
next
=
NULL
;
/*设置指针初值*/
ptr
->
next
=
ptr1
;
/*连接结点*/
ptr
=
ptr
->
next
;
/*指向下一结点*/
}
return
head
;
}
/*-----------*/
/*链表的反转 */
/*-----------*/
llink
invertllist
(
llink
head
)
{
llink
mid
,
last
;
mid
=
NULL
;
while
(
head
!=
NULL
)
{
last
=
mid
;
mid
=
head
;
head
=
head
->
next
;
mid
->
next
=
last
;
}
return
mid
;
}
/*-------------*/
/*链表内存释放 */
/*-------------*/
void
freellist
(
llink
head
)
{
llink
ptr
;
while
(
head
!=
NULL
)
{
ptr
=
head
;
head
=
head
->
next
;
free
(
ptr
);
}
}
int
main
(
void
)
{
int
llist1
[
6
]
=
{
1
,
2
,
3
,
4
,
5
,
6
};
/*数组内容*/
llink
head
;
/*指向链表开始*/
head
=
createllist
(
llist1
,
6
);
if
(
!
head
)
{
printf
(
"内存分配失败!
\n
"
);
exit
(
1
);
}
printf
(
"原来的链表: "
);
printllist
(
head
);
head
=
invertllist
(
head
);
printf
(
"反转后的链表: "
);
printllist
(
head
);
freellist
(
head
);
}
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2