链表-遍历链表
2020-03-05 本文已影响0人
茶还是咖啡
正向遍历链表
正向遍历链表相对简单,即,输出当前节点的值,然后指针指向下一个节点,然后继续输出这个节点的值,以此类推。
code
void printLinkList(ElemSN *head){
if(head==NULL){
return;
}
while(head!=NULL){
printf("%5d",head->data);
head = head->next;
}
}
// 递归实现
void printLinkList1(ElemSN * head){
if(head==NULL){
return;
}
printf("%5d,",head->data);
printLinkList1(head->next);
}
逆向遍历链表
- 可是使用递归的方式,通过不断的进栈的形式,打印链表,但是如果链表的长度非常长,可能出现栈溢出的问题。
void printLinkList2(ElemSN *head){
if(head!=NULL){
printLinkList2(head->next);
printf("%5d",head->data);
}
}
- 除了使用递归的形式,我们可以借助数组,正向遍历链表,依次将链表中的节点存储到数组中,然后逆向遍历数组就可以。但是使用这种形式就是需要使用额外的空间,而且时间复杂度也会增加。
void printLinkList3(ElemSN *head){
if(head==NULL){
return;
}
int data[1000];
int index=0;
while (head) {
data[index++] = head->data;
head = head->next;
}
while (index) {
printf("%5d",data[--index]);
}
}