美文网首页codes
iOS链表的创建、链表的倒序及链表打印

iOS链表的创建、链表的倒序及链表打印

作者: fortitude1990 | 来源:发表于2019-01-07 09:45 被阅读14次

虽然开发中很少用到链表,不过面试的时候,有的面试官还是会问链表问题的,今天就使用C简单写了一个链表

创建一个结构体

struct ListNode{
    int value;
    struct ListNode * next;
};

定义一个链表的头

struct ListNode * listHead;

定义一个结构体生成的函数

struct ListNode * getNode(int x, struct ListNode *next){
    struct ListNode  * node = (struct ListNode *)malloc(sizeof(struct ListNode *));
    node -> value = x;
    node -> next = next;
    return node;
}

写一个生成链表的函数

void createList(){
    
    struct ListNode * preListNode = NULL;
    struct ListNode * rootListNode = NULL;
    
    for (int i = 0; i < 10; i ++) {
        
        struct ListNode * note = getNode(i, NULL);
        
        rootListNode = note;
        
        if (rootListNode == NULL) {
            return;
        }
        
        if (listHead == NULL) {
            listHead = rootListNode;
            preListNode = listHead;
            continue;
        }
        
        preListNode -> next = rootListNode;
        preListNode = rootListNode;
        
    }
    
}

写一个链表倒序的函数

void reverseList(struct ListNode * head){
    
    struct ListNode * rootNode = NULL;
    struct ListNode * reversedHead = NULL;
    struct ListNode * preNode = NULL;

    if (head == NULL) {
        return;
    }
    
    rootNode = head;
    
    while (rootNode != NULL) {
        
        struct ListNode * nextNode = rootNode -> next;
        if (nextNode == NULL) {
            reversedHead = rootNode;
        }
        
        rootNode -> next = preNode;
        preNode = rootNode;
        rootNode = nextNode;

    }
    
    listHead = reversedHead;
}

写一个链表打印的函数

void printList(struct ListNode *head){
    
    if (head != NULL) {
        printf("%d", head -> value);
    }
    
    struct ListNode *nextNode = head -> next;
    while (nextNode != NULL) {
        printf("%d", nextNode -> value);
        nextNode = nextNode -> next;
    }
    
}

执行一下函数、打印一下结果

@implementation LinkedListTest


+ (void)test{
    
    createList();
    printList(listHead);
    reverseList(listHead);
    printf("\n");
    printList(listHead);
    
}


@end

执行结果日志


图片.png

代码地址

相关文章

  • iOS链表的创建、链表的倒序及链表打印

    虽然开发中很少用到链表,不过面试的时候,有的面试官还是会问链表问题的,今天就使用C简单写了一个链表 创建一个结构体...

  • 单向链表算法

    单向链表 反转单向链表 单链表查找倒数第k个节点 单链表递归倒序打印 单链表排序 单链表删除重复节点

  • DFS与BFS

    以先序遍历打印链表为例: 以中序遍历打印链表为例: 以后序遍历打印链表为例: 以层序遍历打印链表为例:

  • 关于链表的预备知识

    定义结点 创建链表结点 连接链表各结点 打印链表结点的值 打印整个链表中的值 删除整个链表 在链表尾部加入结点 特...

  • 链表的创建(头插法,尾插法)

    尾插法创建链表 头插法创建链表 打印链表 删除节点 按升序创建链表,Head是虚头节点 检索链表,并返回节点指针

  • 倒序打印链表

    递归实现 借助栈实现

  • 6.从尾到头打印链表

    思路:直接顺序打印链表,并入栈,出栈的顺序即为倒序

  • 线性表-双向链表与双向循环链表

    双向链表 双向链表示意图如下: 数据结构定义 创建双向链表 双向链表插入元素 双向链表删除元素 双向链表打印元素 ...

  • 剑指Offer - 15 - 反转链表

    题目描述 反转链表 输入一个链表,反转链表后,输出新链表的表头。 思路 用一个指针来保存链表倒序,遍历一次链表,每...

  • Java 基于泛型实现的单链表以及基本操作

    可通过传递一个数组实现链表的初始化倒序打印链表时,采用的递归。也可采用栈的方法实现。 定义节点类: 定义链表类: 测试类

网友评论

    本文标题:iOS链表的创建、链表的倒序及链表打印

    本文链接:https://www.haomeiwen.com/subject/pjuyrqtx.html