您的位置:首页 > 其它

双向链表

2015-10-08 22:32 369 查看
// list.cpp : Defines the entry point for the console application.

//


#include "stdafx.h"

#include <iostream>

using namespace std;


typedef struct list_node {

int data;

list_node *left;

list_node *right;

} Node;


Node *create_node(int data)

{

Node *node = new Node();

node->data = data;

node->left = node->right = NULL;

return node;

}


void delete_node( Node * p )

{

delete p;

p = NULL ;

}


void insert_tail(Node *root , int data)

{

Node *node = create_node( data );


Node *last_node = root;

while(last_node->right != NULL) last_node = last_node->right;

last_node->right = node;

node->left = last_node;

}


Node *find_node(Node *root , int data )

{

Node *node = root ;

while(node != NULL) {

if( data == node->data ) {

return node;

}

node = node->right;

}

return NULL;

}



void insert_back_node(Node *root, int dat , int data )

{

Node *node = find_node(root,dat);

if( node == NULL || node->left == NULL ) return;

Node *new_node = create_node( data );

node->left->right = new_node;

new_node->right = node;

}


void insert_front_node(Node *root, int dat , int data )

{

Node *node = find_node(root,dat);

if( node == NULL ) return;

Node *new_node = create_node( data );

new_node->right = node->right;

new_node->left = node;

node->right = new_node;

}


void remote_node ( Node *root,int data )

{

Node *node = find_node ( root , data );

if( node == NULL ) {

return ;

} else if ( node->left == NULL ) {

node->right->left = NULL;

} else if ( node->right == NULL ) {

node->left->right = NULL ;

} else {

node->left->right = node->right;

node->right->left = node->left;

}


delete_node( node );


}


void traversal( Node *root )

{

Node *last_node = root;

do{

cout<<last_node->data<<endl ;

last_node = last_node->right;

} while(last_node != NULL ) ;


}


int main(int argc, char* argv[])

{

Node *root = create_node(1);


insert_tail(root,4);

insert_tail(root,5);

insert_tail(root,800);

insert_tail(root,6);

insert_tail(root,7);



Node *p = find_node(root,5);

cout << p <<endl;

if(p!=NULL) cout<<p->data <<endl;


insert_back_node(root,5,20);

insert_front_node(root,1,30);


remote_node ( root , 6 ) ;

traversal( root );


return 0;

}

[/code]

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