数据结构与算法整理

链表-遍历链表

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);
}

逆向遍历链表

  1. 可是使用递归的方式,通过不断的进栈的形式,打印链表,但是如果链表的长度非常长,可能出现栈溢出的问题。
void printLinkList2(ElemSN *head){
    if(head!=NULL){
        printLinkList2(head->next);
        printf("%5d",head->data);
    }
}
  1. 除了使用递归的形式,我们可以借助数组,正向遍历链表,依次将链表中的节点存储到数组中,然后逆向遍历数组就可以。但是使用这种形式就是需要使用额外的空间,而且时间复杂度也会增加。
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]);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读