zoukankan      html  css  js  c++  java
  • 翻转链表

    思路:

    (1)从头结点开始,p=L->next,然后从p开始,依次翻转p与p的前一个节点的指针的方向。

    (2)提前记录p的next节点,因为指针变换后不会再指向下一个。

    (3)令p的next指向p前面的节点。

    (4)记录当前p指针,为下一次改变指针方向做准备。

    (5)考虑头结点的情况,如果指针p的前一个节点是头结点,则指向NULL。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    struct Node{
        int data;
        struct Node* next;
    };
    typedef struct Node* List;
    
    List CreateList()
    {
        List L=(List)malloc(sizeof(struct Node));
        L->next=NULL;
        return L;
    }
    
    void Insert(int x,List L,List p)
    {
        List tp=(List)malloc(sizeof(struct Node));
        tp->data=x;
        tp->next=p->next;
        p->next=tp;
    }
    
    void Reverse(List L)
    {
        List tp,p=L->next,pre;
        while(p!=NULL)
        {
            tp=p->next;
            if(p==L->next) p->next=NULL;
            else p->next=pre;
            pre=p;
            p=tp;
        }
        L->next=pre;
    }
    
    void Print(List L)
    {
        List p=L->next;
        while(p!=NULL)
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("
    ");
    }
    
    int main(void)
    {
        int n,i,x;
        List L=CreateList(),p;
        p=L;
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>x;
            Insert(x,L,p);
            p=p->next;
        }
        Print(L);
        Reverse(L);
        Print(L);
        return 0;
    }
    View Code
  • 相关阅读:
    异步任务AsyncTask
    巧用TextView实现分隔线
    android系统的常用权限
    浅析对话框AlertDialog
    LinearLayout中的layout_weight属性详解
    CLOB大数据对象
    模糊查询demo
    ES6 箭头函数
    ES6中数组求和,求平均数方法( reduce )
    ES6中数组方法( every 和 some )
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10041100.html
Copyright © 2011-2022 走看看