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

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

  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 }

原文地址:https://www.cnblogs.com/BasilLee/p/3870487.html