单链表的基本操作(创建,删除,插入,逆置)
Posted cantredo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的基本操作(创建,删除,插入,逆置)相关的知识,希望对你有一定的参考价值。
代码鲁棒性较差,之后补充注释以及减少BUG增加可读性。
#include <iostream> #include <vector> #include <cstring> #include <malloc.h> using namespace std ; typedef struct Node{ int data ; struct Node *next ; }node , *Lnode ; int Linklist_length( node *head ){ node *p = (node*)malloc(sizeof(node)) ; int len = 0 ; while ( p ){ p = p->next ; len ++ ; } return len ; } Lnode Link_reverse_head( node *head ){ node *p = head->next ; head->next = NULL ; node *q ; while ( p ){ q = p ; p = p->next ; q->next = head->next ; head->next = q ; } return head ; } Lnode Linklist_insert( int pos , int num , node *head ){ node *index = head ; for ( int i = 0 ; i < pos ; i ++ ){ index = index->next ; } node *p = (node*)malloc(sizeof(node)) ; p->data = num ; p->next = index->next ; index->next = p ; return head ; } Lnode Linklist_delete( int pos , node *head ){ node *index = head ; for ( int i = 1 ; i < pos ; i ++ ){ index = index->next ; } node *p = index->next ; index->next = p->next ; p->next = NULL ; free( p ) ; return head ; } Lnode Creat_from_head( int count ){ node *head = (node*)malloc(sizeof(node)) ; head->next = NULL ; int num ; while ( count -- && cin >> num ){ node *p = (node*)malloc(sizeof(node)) ; p->data = num ; p->next = head->next ; head->next = p ; } return head ; } Lnode Creat_from_last( int count ){ node *head = (node*)malloc(sizeof(node)) ; head->next = NULL ; int num ; node *index = head ; while ( count -- && cin >> num ){ node *p = (node*)malloc(sizeof(node)) ; p->data = num ; index->next = p ; index = p ; } index->next = NULL ; return head ; } void output( node *head ){ node *p = head->next ; while ( p ){ cout << p->data << " " ; p = p->next ; } cout << endl ; return ; } int main(){ int num ; cin >> num ; node *index_creat = Creat_from_last( num ) ; output( index_creat ) ; int pos , number ; cin >> pos >> number ; node *index_insert = Linklist_insert( pos , number , index_creat ) ; output( index_insert ) ; cin >> pos ; node *index_delete = Linklist_delete( pos , index_creat ) ; output( index_delete ) ; // int len = Linklist_length( index_creat ) ; node *index_reverse = Link_reverse_head( index_creat ) ; output( index_reverse ) ; return 0 ; }
以上是关于单链表的基本操作(创建,删除,插入,逆置)的主要内容,如果未能解决你的问题,请参考以下文章