• 程序员面试宝典——数据结构之单链表


    单链表创建--------->单链表长度--------->单链表删除-------->单链表插入-------->单链表排序--------->单链表逆置

      1 #include<iostream>
      2 #include<stdio.h>
      3 #include<string.h>
      4 #include<stdlib.h>
      5 //#include<conio.h>
      6 using namespace std;
      7 class Node
      8 {
      9 public:
     10     int data;
     11     Node* next;
     12 };
     13 Node* create()
     14 {
     15     Node* head,*p,*s;
     16     int x,cycle=1;
     17     head=(Node*)new Node;
     18     p=head;
     19     while(cycle)
     20     {
     21      printf("
    please input the data:");
     22      scanf("%d",&x);
     23      if(x!=0){
     24      s=(Node*)new Node;
     25       s->data=x;
     26     // printf("
    %d",s->data);
     27      p->next=s;
     28      p=s;
     29      }
     30      else cycle=0;
     31     }
     32     head=head->next;
     33     p->next=NULL;
     34     printf("
    head data is: %d
    ",head->data);
     35     return (head);
     36 }
     37 
     38 Node*  Delete(Node* head,int num)
     39 {
     40     Node* p1,*p2;
     41     p1=head;
     42     while(num!=p1->data&&p1->next!=NULL)
     43     {
     44         p2=p1;//前一个node
     45         p1=p1->next;
     46     }
     47     if(num==p1->data)
     48     {
     49         if(p1==head)
     50         {
     51             head=p1->next;
     52             delete p1;
     53         }
     54         else{
     55         p2->next=p1->next;
     56         delete p1;
     57         }
     58     }
     59     else
     60     printf("
    %d could not been found ",num);
     61     return (head);
     62 }
     63 
     64 int length(Node *head)
     65 {
     66     int n=0;
     67     Node* p;
     68     p=head;
     69     while(p!=NULL){
     70     p=p->next;
     71     n++;
     72     }
     73     return (n);
     74 }
     75 
     76 void print(Node* head)
     77 {    
     78     Node*p;
     79     p=head;
     80     while(p!=NULL){
     81     printf("%d->",p->data);
     82     p=p->next;
     83     }
     84     printf("
    ");
     85 }
     86 
     87 Node* insert(Node* head,int num)
     88 {
     89     Node* p0,*p1,*p2;
     90     p1=head;
     91     p0=(Node*) new Node;
     92     p0->data=num;
     93     while(p0->data>p1->data&&p1->next!=NULL)
     94     {
     95         p2=p1;
     96         p1=p1->next;
     97     }
     98     if(p0->data<=p1->data)
     99     {
    100         if(head==p1)
    101         {
    102             p0->next==p1;
    103             head=p0;
    104         }
    105         else
    106         {
    107             p2->next=p0;
    108             p0->next=p1;
    109         }
    110     }
    111     else
    112     {
    113         p1->next=p0;
    114         p0->next=NULL;
    115     }
    116     return (head);
    117 }
    118 
    119 Node* sort(Node* head)
    120 {
    121     Node*p,*p2,*p3;
    122     int n;
    123     int temp;
    124     n=length(head);
    125     if(head==NULL||head->next==NULL)
    126         return head;
    127     p=head;
    128     for(int j=1;j<n;j++){
    129     p=head;
    130     for(int i=0;i<n-j;++i){
    131     if(p->data>p->next->data){
    132     temp=p->data;
    133     p->data=p->next->data;
    134     p->next->data=temp;
    135     }
    136     p=p->next;
    137     }
    138     }
    139     return head;
    140 }
    141 
    142 Node* reverse(Node* head)
    143 {
    144     Node *p1,*p2,*p3;
    145     if(head==NULL||head->next==NULL)
    146         return head;
    147     p1=head;
    148     p2=p1->next;
    149     while(p2)
    150     {
    151         p3=p2->next;
    152         p2->next=p1;
    153         p1=p2;
    154         p2=p3;
    155     }
    156     
    157     head->next=NULL;
    158     head=p1;
    159     return head;
    160 }
    161 
    162 int main()
    163 {
    164     Node *head=create();
    165     printf("
    list length is:%d
    ",length(head));
    166     printf("********list data is*************
    ");
    167     print(head);
    168     head=Delete(head,4);
    169     printf("
    after delete list length is %d
    ",length(head));
    170     printf("********list data is************
    ");
    171     print(head);
    172     cout<<"************INSERT*****************"<<endl;
    173     head=insert(head,888);
    174     cout<<"after insert list length is "<<length(head)<<endl;
    175     cout<<"**********list data is***********"<<endl;
    176     print(head);
    177     cout<<"**********SORT****************"<<endl;
    178     head=sort(head);
    179     print(head);
    180     cout<<"**********REVERSE*******************"<<endl;
    181     head=reverse(head);
    182     print(head);
    183     return 0;
    184 }

  • 相关阅读:
    视图结构 wxml 列表渲染 for
    表存在之设置默认值
    Oracle之根据约束名查找表
    java中String.indexOf()用法
    Idea之快捷键
    List<Map<String,Object>>之按照某个字段排序
    Oracle之mergeInto
    Oracle之根据字段查找表
    Mybatis之一级/二级缓存
    VueJs之前后端数据交互(使用Vue-resource实现)
  • 原文地址:https://www.cnblogs.com/BasilLee/p/3870487.html
Copyright © 2020-2023  润新知