#include<stdio.h>
#include "malloc.h"
int main()
{
struct node
{
int data;
struct node* next;
};
int num;
node* L = (node*)malloc(sizeof(node));
node* p, * q;
printf("請依次輸入四個數字\n");
for (num = 0; num<4; num++)
{
p= (node*)malloc(sizeof(node));
if (num == 0)L->next = p;
scanf_s("%d", &(p->data));
p = p->next;
}
q = L->next;
for(num=0;num<4;num)
{
printf("%d ", (q->data));
if (q->next = NULL)break;
q = q->next;
}
}
救救孩子,一天了,真不知道錯哪了
uj5u.com熱心網友回復:
for (num = 0; num<4; num++){
p= (node*)malloc(sizeof(node));
scanf_s("%d", &(p->data));
if (num == 0)
{
L->next = p;
}
else
{
q->next =p;
}
q=p;
}
uj5u.com熱心網友回復:
#include <stdio.h>
#include "malloc.h"
int main()
{
struct node
{
int data;
struct node *next;
};
int num;
node *L = (node *)malloc(sizeof(node));//假設你的意圖是L是頭,不存資訊(data)
L->next = NULL; //步驟1 剛開始是空鏈表,所以后續置為NULL
node *p, *q;
printf("請依次輸入四個數字\n");
/*
都鏈接到L之后,第一個節點簡單:
1. L->next = p; p->next = NULL; //這就是所謂鏈接操作,把p寫進L的next,
2.第二個節點呢? 這時候鏈表為 L==>p1==>NULL; (這里記為p1,避免和后續的p混淆)
我們的目的是要把,這時候又申請一個節點放到p
如果直接執行
2.1) L->next = p; ? 如果這樣做 原來的L->next被覆寫了,,p1不見了
變成L==>p==>?, 很明顯到這里你想如果把p1放進問號就完美了L==>p==>p1==>NULL
怎么做?我們重新開始,
2.1)先把p1記錄起來,node *first = L->next; (現在的first就是原來的p1)
2.2)L->next = p; (L==>p==?)
2.3)p->next = first;(L==>p==> p1==>NULL)完成
后續的操作都類似,原則就是改寫L->next之前,先保存他
~~~~~~~~~~~
再來想想,能不能更一般化呢?不分第一個 還是第二個
直接都統一用
node *first = L->next;
L->next = p; //ok
p->next = first; //因為p是第一個節點,這時也是尾巴節點,我們期望他的next==NULL
//也就是說,first = L->next;要等于NULL,我們只需在L初始化之后將其next賦值為NULL
// 步驟1
//
*/
for (num = 0; num < 4; num++)
{
p = (node *)malloc(sizeof(node));
scanf_s("%d", &(p->data));
/*p = p->next; 這時候p->next都還沒初始化,是一個未知的值
而p是用來裝存malloc出來的指標的,你這樣干等于說,p馬上用來裝其他的東西
剛剛malloc出來的東西,誰來裝存呢?,*/
//p = p->next;
node *first = L->next; //2.1
L->next = p; //2.2
p->next = first; //2.3
}
q = L->next;
for (num = 0; num < 4; num)
{
/*注意,不是q->next = NULL, =是賦值,==才是判斷,
如果你害怕把== 手誤寫成 = , 那么你可以把NULL寫到前面
這樣如果你寫成NULL= q->next 會編譯不通過,讓編譯器提醒你,錯了*/
if(NULL == q->next )
break;
//訪問之前,先判斷,而不是先訪問他再判斷是否為空
printf("%d ", (q->data));
//if (q->next = NULL)
// break;
q = q->next;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91634.html
標籤:C語言
上一篇:求大佬幫幫小白吧
