還有一個月,各個公司都會開始秋季招聘了,作為即將成為一個被面試的人,說實話,我很緊張也很激動,緊張的原因是我沒有進(jìn)行過技術(shù)面試,激動的原因是要看看這大學(xué)三年我到底學(xué)的怎么樣,到底哪些個公司會要我。而與此同時,學(xué)校還在進(jìn)行著每年一度的課程很多的小學(xué)期,耽誤著大家出去實習(xí),耽誤著大家準(zhǔn)備找工作的時間,不知道學(xué)院的領(lǐng)導(dǎo)們到底是怎么想的。。
今天上午,把以前寫過的關(guān)于鏈表的代碼重新練習(xí)了一下,不全,只是一些常見的,包括:建立鏈表的相關(guān)操作,求鏈表的長度,對鏈表實現(xiàn)冒泡排序,完成單鏈表的逆序和逆序輸出,合并兩個已經(jīng)排好序的鏈表。
下面是代碼:
1 #include <iostream> 2 3 using namespace std; 4 5 struct Node 6 { 7 public: 8 int data; 9 Node *next; 10 Node(){}; 11 Node(int i) 12 { 13 data = i; 14 next = NULL; 15 } 16 }; 17 class List 18 { 19 public: 20 Node *head; 21 Node *curr; 22 List() 23 { 24 head = NULL; 25 curr = NULL; 26 } 27 void insert_from_tail(Node *tmp) 28 { 29 if(head == NULL) 30 { 31 head = new Node(); 32 head->next = tmp; 33 curr = tmp; 34 } 35 else 36 { 37 curr->next = tmp; 38 curr = tmp; 39 } 40 } 41 int length()const 42 { 43 int count = 0; 44 Node *tmp = head->next; 45 while(tmp != NULL) 46 { 47 tmp = tmp->next; 48 count++; 49 } 50 return count; 51 } 52 }; 53 //完成兩個節(jié)點的值的交換 54 void Swap(Node *t1,Node *t2) 55 { 56 int tmp = t1->data; 57 t1->data = t2->data; 58 t2->data = tmp; 59 } 60 //冒泡排序 61 void bubble_sort(List &l) 62 { 63 int len = l.length(); 64 for(int i = len-1 ; i > 0 ; --i) 65 { 66 Node *tmp = l.head->next; 67 for(int j = 0 ; j < i ; ++j) 68 { 69 if(tmp->data > tmp->next->data) 70 { 71 Swap(tmp,tmp->next); 72 } 73 tmp = tmp->next; 74 } 75 } 76 } 77 //完成單鏈表的逆序并輸出 78 void reverse_print(List &l) 79 { 80 if(l.head == NULL || l.head->next == NULL)//鏈表是空 81 { 82 return ; 83 } 84 Node *p1 = l.head->next; 85 Node *p2 = l.head->next->next; 86 p1->next = NULL;//這里一定要讓p1->next = NULL,因為逆序后p1實際上是鏈表的最后一個節(jié)點 87 while(p2 != NULL) 88 { 89 Node *tmp = p2->next; 90 p2->next = p1; 91 p1 = p2; 92 p2 = tmp; 93 } 94 l.head->next = p1;//注意這里第一個節(jié)點是p1,而不是p2 95 Node *p = l.head->next; 96 while(p != NULL) 97 { 98 cout<<p->data<<" "; 99 p = p->next;100 }101 cout<<endl;102 }103 //合并兩個單鏈表104 void merge(List l1 ,List l2 ,List &l3)105 {106 Node *p1 = l1.head->next;107 Node *p2 = l2.head->next;108 while(p1 != NULL || p2 != NULL)109 {110 if(p2 == NULL || (p1 != NULL && p1->data <= p2->data))111 {112 l3.insert_from_tail(p1);113 p1= p1->next;114 }115 else116 {117 l3.insert_from_tail(p2);118 p2 = p2->next;119 }120 }121 }122 int main()123 {124 /*---------------------------------------*/125 //初始化單鏈表126 int i;127 Node *p;128 List l;129 Node t[5] = {2,1,4,3,0};130 for(i = 0 ; i < 5 ; ++i)131 {132 l.insert_from_tail(&t[i]); 133 }134 //單鏈表的長度135 cout<<"初始化單鏈表的長度是:";136 cout<<l.length()<<endl;137 cout<<"初始化鏈表中的數(shù)據(jù)是:";138 p = l.head->next;139 while(p != NULL)140 {141 cout<<p->data<<" ";142 p = p->next;143 }144 cout<<endl;145 146 /*----------------------------------------*/147 //排序后的結(jié)果148 bubble_sort(l);149 cout<<"排序后鏈表中的數(shù)據(jù)是:";150 p = l.head->next;151 while(p != NULL)152 {153 cout<<p->data<<" ";154 p = p->next;155 }156 cout<<endl;157 /*----------------------------------------*/158 //逆序單鏈表159 cout<<"逆序后鏈表中的數(shù)據(jù)是:";160 reverse_print(l);161 /*----------------------------------------*/162 //合并兩個拍好序的單鏈表163 List l1,l2,l3;164 Node t1[4] = {1,3,4,5};165 Node t2[4] = {2,6,7,8};166 for(i = 0 ; i < 4 ; ++i)167 {168 l1.insert_from_tail(&t1[i]);169 l2.insert_from_tail(&t2[i]);170 }171 cout<<"{1,3,4,5}和{2,6,7,8}合并后的鏈表中的數(shù)據(jù):";172 merge(l1,l2,l3);173 p = l3.head->next;174 while(p != NULL)175 {176 cout<<p->data<<" ";177 p = p->next;178 }179 cout<<endl;180 return 0;181 }
前一段時間問過一個去了人人網(wǎng)C++部門的師哥,說想去大公司的話,代碼能力必須過關(guān)哦~~~~