链表类面试题
1、清空鏈表跟銷毀鏈表的區(qū)別
鏈表本身是一個數據結構,清空是把鏈表中的元素清空,但鏈表還存在,銷毀則是把鏈表這個結構的內存都釋放了。。
清空是鏈表沒節(jié)點,但是鏈表還在,可以繼續(xù)插入節(jié)點。銷毀就是鏈表沒了,整個鏈表的空間都被釋放了,不能進行任何操作了。
就像一個杯子,把杯子里的水倒掉叫清空,把杯子砸碎叫銷毀。。
清空鏈表與銷毀鏈表的代碼如下:
思路:常見的三指針方法
typedef struct LinkNode {int data;struct LinkNode* next; }LinkNode , *LinkList;LinkList inverseList(LinkList head) {if(head == NULL || head->next == NULL)return head;LinkList pre = NULL;LinkList curr = head;LinkList next = NULL;while(curr && curr->next){if(pre)pre->next = curr->next;elsehead = curr->next;pre = curr;next = curr->next->next;curr->next->next = curr;curr->next = next;curr = next; }return head; }
鏈表本身是一個數據結構,清空是把鏈表中的元素清空,但鏈表還存在,銷毀則是把鏈表這個結構的內存都釋放了。。
清空是鏈表沒節(jié)點,但是鏈表還在,可以繼續(xù)插入節(jié)點。銷毀就是鏈表沒了,整個鏈表的空間都被釋放了,不能進行任何操作了。
就像一個杯子,把杯子里的水倒掉叫清空,把杯子砸碎叫銷毀。。
清空鏈表與銷毀鏈表的代碼如下:
#include "stdlib.h" #include "stdio.h"struct student {int num; //學號 float score; //分數,其他信息可以繼續(xù)在下面增加字段struct student *next; //指向下一節(jié)點的指針 };//銷毀鏈表 int DestroyList(struct student *head) {struct student *p;if(head==NULL)return 0;while(head){p=head->next;free(head);head=p;}return 1; }//清空鏈表 int ClearList(struct student *head) {struct student *p,*q;if(head==NULL)return 0;p=head->next;while(p!=NULL){q=p->next;free(p);p=q;}head->next=NULL;return 1; } 2、鏈表相鄰元素翻轉,如a->b->c->d->e->f-g,翻轉后變?yōu)?#xff1a;b->a->d->c->f->e->g
思路:常見的三指針方法
typedef struct LinkNode {int data;struct LinkNode* next; }LinkNode , *LinkList;LinkList inverseList(LinkList head) {if(head == NULL || head->next == NULL)return head;LinkList pre = NULL;LinkList curr = head;LinkList next = NULL;while(curr && curr->next){if(pre)pre->next = curr->next;elsehead = curr->next;pre = curr;next = curr->next->next;curr->next->next = curr;curr->next = next;curr = next; }return head; }
總結
- 上一篇: C++大数模板
- 下一篇: OGRE 1.7.2 [Cthugha]