zoukankan      html  css  js  c++  java
  • 华为机试题 --- 从单向链表中删除指定值的节点

    #include <iostream>
    using namespace std;
    struct ListNode
    {
        int  m_nKey;
        ListNode* m_pNext;
    };
    void insertNode(ListNode* head, int input, int indexVal)
    {
        ListNode* curptr = head,*curnext;
        while ( curptr != nullptr && curptr -> m_nKey != indexVal)
        {
            curptr = curptr -> m_pNext;   //指针指向下一个结点
        }            // 经过while后,指针定位到要找的位置处
        ListNode* temptr = new ListNode; //新建一个结点
        temptr -> m_nKey = input;        //存入值到结点
        curnext = curptr -> m_pNext;    
        curptr -> m_pNext = temptr;
        temptr -> m_pNext = curnext;     // 三步完成结点的插入
        
    }
    void delNode( ListNode* head, int input)
    {
        ListNode* curptr = head, *precur;
        if (curptr -> m_nKey == input)     // 头结点单独处理
        {
            head = head -> m_pNext;
            delete curptr;
        }
        curptr = head -> m_pNext;
        precur = head;
        while (curptr != nullptr && curptr -> m_nKey != input)
        {      
            curptr = curptr -> m_pNext;   //指针指向下一个结点
            precur = precur -> m_pNext;   
        }  
        precur -> m_pNext = curptr -> m_pNext;
        delete curptr;
    }
    void disVal( ListNode* head )
    {
        ListNode* curptr = head;
        while ( curptr != nullptr )
        {
            cout <<curptr->m_nKey << " ";  // 最后一个数字后边也有空格,不然过不了
            curptr = curptr -> m_pNext;   //指针指向下一个结点
        }
        cout << endl;     //大坑啊, 加了一句换行就过了
    }
    int main ()
    {
        int num = 0, headVal = 0, delVal = 0;
        int input,indexVal;
        while ( cin >> num )     // 不知道为啥还要循环检测,真是坑
        {
            cin >> headVal;
            ListNode* head = new ListNode;
            head -> m_nKey = headVal;
            head ->m_pNext = nullptr;
            for ( int i = 0; i < num - 1; i++)
            {
                cin >> input >> indexVal;
                insertNode( head, input, indexVal);
            
            }
            cin >> delVal;
            delNode( head, delVal );
            disVal( head );
        }
        
        return 0;
    }

     题目描述 bug太多

    题目描述

    输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。

    链表结点定义如下:

    struct ListNode

    {

          int       m_nKey;

          ListNode* m_pNext;

    };

    详细描述:

    本题为考察链表的插入和删除知识。

    链表的值不能重复

    构造过程,例如

    1 -> 2

    3 -> 2

    5 -> 1

    4 -> 5

    7 -> 2

    最后的链表的顺序为 2 7 3 1 5 4 

    删除 结点 2 

    则结果为 7 3 1 5 4 


    输入描述:

    1 输入链表结点个数
    2 输入头结点的值
    3 按照格式插入各个结点
    4 输入要删除的结点的值



    输出描述:

    输出删除结点后的序列


    输入例子:
    5
    2
    3 2
    4 3
    5 2
    1 4
    3
    

    输出例子:
    2 1 5 4
  • 相关阅读:
    Node 命令行工具 commander.js 快速上手
    使用 express 极简处理前端路由的 history 模式问题
    在博客中插入希沃白板课件
    休息一下(屏幕提醒)
    vue htmlWebpackPlugin.options.title 标题设置
    使用 docker 部署 elasticsearch 并安装 ik 中文分词器
    .NET 中的计时 tick 是多长?
    剑指offer队列的最大值(主队列+辅助队列)
    Golang垃圾回收原理解析
    Golangchannel底层实现精要
  • 原文地址:https://www.cnblogs.com/simplepaul/p/6753281.html
Copyright © 2011-2022 走看看