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

  • 相关阅读:
    android存储訪问框架Storage Access Framework
    hdu 5338 ZZX and Permutations (贪心+线段树+二分)
    集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(三)
    PHP中文分词扩展 SCWS
    使用docker 搭建基础的 mysql 应用
    UVA 11090 Going in Cycle!!(Bellman-Ford推断负圈)
    HDU 5237 Base64
    Android 自己定义主菜单
    HDU 1018 Big Number 数学题解
    python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)
  • 原文地址:https://www.cnblogs.com/benchao/p/4513561.html
Copyright © 2011-2022 走看看