美文网首页
[数据结构与算法-iOS 实现]字符串反转、单链表反转

[数据结构与算法-iOS 实现]字符串反转、单链表反转

作者: 孙掌门 | 来源:发表于2019-12-24 21:15 被阅读0次

iOS 字符串反转、单链表反转

字符串反转

做法就是,设立两个begin和end哨兵,然后将这两个哨兵对应的值进行交换,当 begin >=end 的时候,结束


void reverseStr(char *chr){
    char *begin = chr;
    char *end = chr + strlen(chr) - 1;
    while (begin < end) {
        char temp = *begin;
        *(begin ++) = *end;
        *(end --) = temp;
    }
}

单链表反转

1->2->3->4->NULL 听过反转之后变成 4->3->2->1->NULL

头插法:

头插法需要我们定义一个新的头结点作为新的链表,然后利用头插法,将原来的链表的每一个节点取出来,然后去新的链表里面做头插法,这样就可以反转了,这里需要一个新的头结点,和遍历原来链表的一个P指针。


/// 构造一个链表
struct Node *constructList(void){
    // 当前节点
    struct Node *cur = NULL;
    // 头结点
    struct Node *head = NULL;
    for (int i = 1 ; i < 5 ; i ++) {
        struct Node *node = malloc(sizeof(struct Node));
        node->data = i;
        // 如果头结点为空
        if (head == NULL) {
            // 将当前节点赋值为头结点
            head = node;
        } else {
            // 将当前节点的next指向这个新的节点,形成链表
            cur->next = node;
        }
        // 将当前节点赋向后移动
        cur = node;
    }
    cur->next = NULL;
    return head;
}

上面的代码是构造一个链表,构造一个链表的思想就是,创建一个节点,然后如果当前有头结点,就将当前节点的next指向新创建的节点,然后将当前节点向后移动,如果当前没有头结点,就将头结点和当前节点都赋值为新创建的节点.

/// 链表的反转
/// @param head 头结点
struct Node * reverseList(struct Node *head){
    // 新链表哨兵指针
    struct Node *newHead = NULL;
    // 旧链表哨兵指针
    struct Node *p = head;
    // 旧链表遍历完毕
    while (p != NULL) {
        // 下一个节点
        struct Node *temp = p->next;
        // 将这个节点头插到新的链表里面
        p->next = newHead;
        // 更改新链表的头位置
        newHead = p;
        // 旧链表的头向后移动
        p = temp;
    }
    return newHead;
}


上面的代码是反转一个链表,反转链表的思想就是新建一个链表然后利用头插法,先从原来的链表里面按照顺序一个个取,取出来之后到新的链表里面进行头插,就形成了头插。

相关文章

  • 单链表反转问题

    基本问题 如何将单链表反转? 单链表结构定义 算法实现 进阶问题 如何将单链表在指定区间内进行反转? 问题分析 这...

  • 算法

    字符串反转 给定字符串"hello, world",实现将其反转。 链表反转 有序数组合并 Hash算法 在一个字...

  • [数据结构与算法-iOS 实现]字符串反转、单链表反转

    iOS 字符串反转、单链表反转 字符串反转 做法就是,设立两个begin和end哨兵,然后将这两个哨兵对应的值进行...

  • 链表简单算法相关练习

    单链表反转: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 迭代方式实现: 复杂度分析: 时...

  • 单链表反转

    单链表反转 单链表初始化 输出 反转 释放 实现代码 尚未实现 元素插入 元素删除

  • 单链表反转

    单链表反转 很多时候工作和面试的时候都会遇到类似的单链表反转的情况,今天就参考写了一个,类似数据结构和算法的知识,...

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

  • 反转单链表Java实现

    问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 解题思路 为了实现反转单链表,...

  • LeetCode链表专题

    (一)LeetCode206.反转链表 题目描述: 反转一个单链表。 代码实现 (二)LeetCode160. 相...

  • LeetCodeDay12 —— 反转链表&合并两个有序链表

    206. 反转链表 描述 反转一个单链表。 进阶 链表可以迭代或递归地反转。你能否两个都实现一遍? 思路 迭代版本...

网友评论

      本文标题:[数据结构与算法-iOS 实现]字符串反转、单链表反转

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