当前位置:首页 > 单链表(不带头结点)
Author:Jerey_Jobs Version:0.1 Date: Description:创建链表用尾插法( 再逆序输出 ) Funcion List:
*****************************************************/
#include
struct node /*定义链表节点*/ {
int num;
struct node *next; };
typedef struct node Node ; /*简化链表节点表示*/ typedef struct node *Link ;
void create_link( Link *head ) /*创建新的,空的链表*/ {
*head = NULL ; }
void is_malloc_ok( Link *new_node ) /*判断节点是否创建成功*/ {
if( ( *new_node == NULL ) ) {
printf( \ exit( -1 ); } }
void create_new_node( Link *new_node, int i ) /*创建节点*/ {
( *new_node ) = ( Link )malloc( sizeof( Node ) ); is_malloc_ok( new_node ); ( *new_node ) -> num = 9-i ; }
void insert_node_tail( Link *head, Link *new_node ) /*尾插插入节点*/ {
Link tmp; tmp = *head;
if( tmp == NULL ) /*判断链表为空,则头插*/
{
( *new_node ) -> next = tmp ; *head = *new_node; }
else /*链表不为空,则尾插*/ {
while( tmp -> next != NULL ) {
tmp = tmp -> next; }
tmp -> next = ( *new_node ); ( *new_node ) -> next = NULL ; } }
void display_link( Link *head ) /*遍历*/ {
Link tmp ; tmp = *head;
while( tmp != NULL ) {
printf( \ tmp = tmp -> next ; } }
void convert_link( Link *head ) /*逆序*/ {
Link p1 = NULL ; Link p2 = NULL ; Link p3 = NULL ;
p1 = p2 = p3 = *head;
if( *head == NULL ) {
printf( \ return ; }
if( (*head) -> next == NULL ) {
return ; }
p2 = p1 -> next ;
if( p2 -> next == NULL ) {
p2 -> next = p1; p1 -> next = NULL; *head = p2; return ; }
p3 = p2 -> next ;
while( p3 -> next != NULL ) {
p2 -> next = p1; p1 = p2; p2 = p3;
p3 = p3 -> next; }
p3 -> next = p2; p2 -> next = p1;
( *head ) -> next = NULL ; *head = p3; }
void release_link( Link *head ) /*释放*/ {
Link tmp ; tmp = *head ;
while( *head != NULL ) {
( *head ) = ( *head ) -> next ; free( tmp ); tmp = ( *head ); } }
int main() {
Link head = NULL ;
Link new_node = NULL; int i ;
create_link( &head );
for( i = 0; i < 10; i++ )
{
create_new_node( &new_node , i ); insert_node_tail( &head, &new_node ); }
display_link( &head ); printf( \
convert_link( &head ); display_link( &head );
release_link( &head );
return 0; }
共分享92篇相关文档