zoukankan      html  css  js  c++  java
  • 链表反转问题

    问题:将一个链表反转写出算法。

    回答:方法一:

    #include<stdio.h>
    #include<stdlib.h>

    /* 链表节点 */
    struct node
    {
        int data;
        struct node* next;
    };

    /* 反转单链表. 分别用3个指针,指向前一个,当前,下一个 */
    static void reverse(struct node** head_ref)
    {
        struct node* prev   = NULL;
        struct node* current = *head_ref;
        struct node* next;
        while (current != NULL)
        {
            next  = current->next;
            current->next = prev;
            prev = current;
            current = next;
        }
        *head_ref = prev;
    }

    /* 添加数据。 头部插入 */
    void push(struct node** head_ref, int new_data)
    {
        struct node* new_node =
                (struct node*) malloc(sizeof(struct node));

        new_node->data  = new_data;
        new_node->next = (*head_ref);
        (*head_ref)    = new_node;
    }

    /* 打印链表 */
    void printList(struct node *head)
    {
        struct node *temp = head;
        while(temp != NULL)
        {
            printf("%d  ", temp->data);
            temp = temp->next;
        }
    }

    int main()
    {
        struct node* head = NULL;

         push(&head, 20);
         push(&head, 4);
         push(&head, 15);
         push(&head, 85);
         push(&head, 60);
         push(&head, 100);

         printList(head);
         reverse(&head);
         printf(" Reversed Linked list ");
         printList(head);
    }

    方法二:

    /* 使用递归的方法 */
    static struct node * reverseRecall(struct node* head){
        //最后一个节点会返回 作为头部
        if(NULL == head || head->next == NULL) return head;
        //head->next 表示剩下的部分
        struct node * newHead = reverseRecall(head->next);
        head->next->next = head; //颠倒指针
        head->next = NULL;//原来的头节点 next 应该为空
        return newHead;
    }

  • 相关阅读:
    [hdu7034]Array
    [hdu7012]Miserable Faith
    CF 1559D2. Mocha and Diana
    CF 1447E Xor Tree
    2021年-华为杯-物联网大赛(1)
    去掉e-select下拉框的小三角图案
    element中使用select组件 下拉框位置偏移的解决方法
    SQL注入之高权限注入
    SQL注入基础简介
    增删改查的实现
  • 原文地址:https://www.cnblogs.com/benchao/p/4513561.html
Copyright © 2011-2022 走看看