分析这段代码://头插法(换行时结束输入) LinkList List_HeadInsert(LinkList L) { int tempdata; while (cin >> tempdata) { LNode *p = new LNode; p -> data = tempdata; p -> next = L -> next; if (cin.get() == '\n') { break; } } }
时间: 2023-02-14 17:43:32 浏览: 97
这段代码实现了链表的头插法。它首先声明了一个临时变量 tempdata,然后使用了一个 while 循环读入数据。在循环中,它创建了一个新的 LNode 类型的指针 p,并将 tempdata 的值赋给了 p->data。它将 p 的 next 指针指向了 L 的 next 指针,然后使用 cin.get() 函数读入一个字符。如果这个字符是换行符,就跳出循环,结束输入。
相关问题
这段代码有什么问题://头插法(换行时结束输入) LinkList List_HeadInsert(LinkList L) { int tempdata; while (cin >> tempdata) { LNode *p = new LNode; p -> data = tempdata; p -> next = L -> next; if (cin.get() == '\n') { break; } } }
这段代码是一个简单的头插法的实现,但有一些问题:
1. 在输入数据时,使用的是 cin >> tempdata,如果输入的数据中有空格或其他特殊符号,将会导致输入错误。
2. 创建新节点时,p -> next 指向 L -> next,这样会导致链表新节点永远插在第一个位置,而不是插在头部。
3. 在输入数据时,使用了 cin.get() 来判断是否结束输入,但是这个函数会读取一个字符,如果输入数据中有多余的字符将会导致读取错误。
建议使用 getline()函数来读取整行数据并且通过判断字符串长度来确定是否结束输入, 并且在插入新节点时将p->next指向L->next的下一个节点,保证新节点在链表头部。
创建单链表linklist list_Headinsert(linklist &L)为什么形参是这个
形参linklist &L是引用类型,用于修改传入的链表L。在函数内部,我们可能需要改变链表的头部指针,以便在链表的头部插入新节点。如果我们不使用引用类型,而是使用指针类型linklist L,那么在函数内部对L进行修改后,实际上只是修改了L的副本,不会影响到原来的链表。而使用引用类型可以直接修改原来的链表。
阅读全文