c++之单链表递归输出


#include
#include 

using namespace std;

typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

void initList(LinkList &L)
{
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
}

void creatList(LinkList &L,int n)
{
    LinkList s,p;
    s=L;
    while(n--)
    {
        p=(LinkList)malloc(sizeof(LNode));
        cin>>p->data;
        p->next=s->next;
        s->next=p;
    }
}

void printList(LinkList &L)
{
    if(L->next!=NULL)
        printList(L->next);
        cout<data<<" ";
}

int main()
{
    LinkList L;
    initList(L);
    int n;
    cin>>n;
    creatList(L,n);
    printList(L);
 } 

img


不知道为什么总是会出现一个随机数在后面。


int main()
{
    LinkList L;
    initList(L);
    int n;
    cin>>n;
    creatList(L,n);
    printList(L->next);
 }

你这是把带头节点的链表的那个头节点也输出了,由于没有赋值,肯定是个随机数啊!
改main函数里为printList(L->next)就行了。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/652953
  • 你也可以参考下这篇文章:C++ 基类中静态成员初始化问题、基类头文件中定义类外变量重定义问题的解决过程
  • 除此之外, 这篇博客: C++面试知识点汇总中的 线程通信方式,如何保证数据一致性? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 通信方式:

    • 全局变量
    • 信号机制

    同步:

    ​ 临界区:通过多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问;

    ​ 互斥量Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问

    ​ 信号量Semphare:为控制具有有限数量的用户资源而设计的,它允许多个线程在同一时刻去访问同一个资源,但一般需要限制同一时刻访问此资源的最大线程数目。

    ​ 事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作;