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

  • 相关阅读:
    [LeetCode 1029] Two City Scheduling
    POJ 2342 Anniversary party (树形DP入门)
    Nowcoder 106 C.Professional Manager(统计并查集的个数)
    2018 GDCPC 省赛总结
    CF 977 F. Consecutive Subsequence
    Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
    Poj 2337 Catenyms(有向图DFS求欧拉通路)
    POJ 1236 Network of Schools (强连通分量缩点求度数)
    POJ 1144 Network (求割点)
    POJ 3310 Caterpillar(图的度的判定)
  • 原文地址:https://www.cnblogs.com/benchao/p/4513561.html
Copyright © 2011-2022 走看看