struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
struct ListNode 有它的內部數據“val”,它是一個int,因為它是一個列表節點,它包含一個指向下一個ListNode“next”的指針。
ListNode(int x): val(x), next(NULL){} 初始化當前節點為x,指針為空。
參考博文:https://www.cnblogs.com/songweiren/p/8735398.html
PNode CreateList(void) {
int len; // 用於定義鏈表長度
int val; // 用於存放節點數值
PNode PHead = (PNode)malloc(sizeof(Node)); // 創建分配一個頭節點內存空間
//頭節點相當於鏈表的哨兵,不存放數據,指向首節點(第一個節點)
if (PHead == NULL) // 判斷是否分配成功
{
printf("空間分配失敗 \n");
exit(-1);
}
//指向鏈表尾部的指針,個人認為PTail是在棧空間上的,是一個輔助指針,用於連接新的節點
PNode PTail = PHead; // 鏈表的末尾節點,初始指向頭節點
PTail->Next = NULL; // 最后一個節點指針置為空
printf("請輸入節點個數:");
scanf("%d", &len); // 輸入節點個數
for (int i = 0; i < len; i++) {
PNode pNew = (PNode)malloc(sizeof(Node)); // 分配一個新節點
if (pNew == NULL) {
printf("分配新節點失敗\n");
exit(-1);
}
printf("請輸入第 %d 個節點的數據:", i + 1);
scanf_s("%d", &val); // 輸入鏈表節點的數據
pNew->Element = val; // 把數據賦值給節點數據域
PTail->Next = pNew; // 末尾節點指針指向下一個新節點,連接新的節點
pNew->Next = NULL; // 新節點指針指向為空
PTail = pNew; // 將新節點復制給末尾節點 ,將PTail指向尾節點
}
printf("創建鏈表成功\n"
);
return PHead; // 返回頭節點
}