zoukankan      html  css  js  c++  java
  • 单链表的逆置

    单链表的逆置是面试官非常青睐的题,这个题可以看出面试者对链表和指针的操作。
    而且问题也很好描述,一句话就表达出了自己的题。
    ----------------------------------------------------------------------------------------------
    一、算法思想:(头插法)
    <1>,将源链表分为链表头和链表实体。
    <2>,将链表实体节点用头插法依次插入到链表头中。
    <3>,如果链表实体插完则算法结束,否则转到<2>.

    --------------------------------------------------------------------------------------------
    二、算法的实现:

    头插法:

    void reverse(struct node *head)
    {
            if (head == NULL)
                return ;
            struct node *p = head->next,*pnext = NULL;
            head->next = NULL;
            while (p != NULL) {
                    pnext = p->next;
                    p->next = head->next;
                    head->next = p;
                    p = pnext;
            }
            return ;
    }

     利用辅助指针

    void ListReverse2(LinkList L)
    {
        LNode *real = L->next;          //带头结点的链表,real指向第一个实结点
        //real为NULL,则链表为只含头结点的空表
        //real->nexxt为NULL,则链表只含有一个结点
        if(real == NULL || real->next == NULL)          
            return;
    
        LNode *pre = real;              //先前指针
        LNode *cur = real->next;        //当前指针
        LNode *suc = NULL;              //后继指针
    
        while(cur != NULL)
        {
            suc = cur->next;
            cur->next = pre;
    
            pre = cur;
            cur = suc;
        }
        real->next = NULL;              //while执行后第一个结点和第二个结点互指
    
        L->next = pre;                  //记录新的头结点
    }
  • 相关阅读:
    线段树节点到底开多大
    HDU4901 The Romantic Hero DP
    VIM 配置文件可执行命令
    codeforces159D
    codeforces416B
    codeforces165C
    codeforces332B
    Node.js权威指南 (9)
    iOS-android-windowsphone等移动终端平台开发流程图
    前端面试题细节问题
  • 原文地址:https://www.cnblogs.com/wft1990/p/6875485.html
Copyright © 2011-2022 走看看