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

  • 相关阅读:
    【转】backtrack5工具之SQLMAP使用笔记(SQL注入用)
    httpd.conf配置详解
    【转】CodeBlocks+wxWidgets安装教程
    Windows下的Photoshop CS6快捷键
    backtrack常用渗透命令
    Codeforces Round #137 (Div. 2)
    Fedora 17 上安装 AMP 服务(Apache MySQL PHP)
    这几天用linux的体验
    EVO 4G 相机 照相 黑屏
    转载:qsort细节用法,double型的排序我竟然一直用错了~~~
  • 原文地址:https://www.cnblogs.com/benchao/p/4513561.html
Copyright © 2011-2022 走看看