電子書籍の厳選無料作品が豊富!

C言語のノードの連結について質問です。
途中までできていて、残りがわからないです。

作ろうとしているプログラムは、ノードpの後にノードq以降のリストを連結する関数を作ろうとしています。

#include<stdio.h>

struct node{
int data;
struct node *next;
};
struct node *head,*tail;

void concat(struct node *p, struct node *q)
{
if(p -> head == NULL)  もしpがなにもなかったら 

これ以降が思いつきません。
elseではどうしたらいいんでしょうか。

よろしくお願いします。

A 回答 (2件)

> if(p -> head == NULL)  もしpがなにもなかったら


↑struct node に head というメンバーはありませんよ。

> ノードpの後にノードq以降のリストを連結する関数
↑不明確です。

変数 head と tail がそれぞれ構造体 node の先頭と末尾を示しいるとして、ノードp は head が示すリストへ連結されている一つのノードであり、ノードq はまだ head が示すリストへ連結されていないノードリストであると仮定した場合、

struct node * n;

for (n = q; n != NULL; n = n->next)
{
 if (n->next == NULL)
  break;
}

if (p->next == NULL)   /* ノードp は末尾である p == head もしくは p == tail でも確認可 */
 tail = n;        /* tail へノードリストq の末尾ノードを代入 */
else           /* 中間ノード */
 n->next = p->next;  /* ノードリストq の末尾ノードの next へノードp の次のノードを代入 */

p->next = q;       /* ノードp の next へ q を代入 */
    • good
    • 1

pのnextがNULLになるまでたどって、そのNULLが入っていたところにqを入れる。


絵を書けば一発で分かると思うのですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!