[問題] 連結串列問題
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
在鏈結串列結構程式中,輸入一值尋找某一節點與該節點前後節點,並回傳指標.
印出回傳三該節點之內部資料
從main函式中呼叫一函式(以A稱呼),於A函式內開始收詢某一節點與該節點之前後節點,
最後A函式尋找完後並回傳結果(以指標方式回傳), 於main函式中無法printf顯示該三節點內部資料
希望得到的正確結果:
7
8
9
程式跑出來的錯誤結果:
編譯成功,但是執行就無法顯示,程式會蕩掉
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
IDE:VC++
有問題的code: (請善用置底文標色功能)
#include <stdio.h>
struct node
{
int a;
struct node * next;
};
typedef struct node Link;
Link* createNewNode(int a_value)
{
Link * NewNode =(Link *) malloc(sizeof(struct node));
NewNode->a = a_value;
NewNode->next = NULL;
return NewNode;
}
void freeALLNode(Link * Head)
{
while(Head != NULL)
{
Link *pt = Head;
Head = Head ->next;
free(pt);
}
}
void LinkNode(Link * NodeA, Link * NodeB)
{
NodeA->next = NodeB;
}
void print_link(Link * pt)
{
printf("--Display------------------------------------------------\n");
while(1)
{
printf("[Node],記憶體值=%x,內容值
=%x,value=%d,next=%x\n",&pt,pt,pt->a,pt->next);
if(pt->next == NULL)
break;
pt = pt->next;
}
printf("---------------------------------------------------------\n");
}
Link* search_key1(int k,Link *Node)
{
Link * search_pt = Node;
while(search_pt != NULL)
{
if(search_pt->a == k)
{
printf("找到Node,記憶體=%x,內容值
=%x,value=%d,Next=%x\n",&search_pt,search_pt,search_pt->a,search_pt->next);
return search_pt;
}
search_pt = search_pt->next;
}
return NULL;
}
void insertOneNode(Link *currentNode , Link * insertNode)
{
Link *tempNode;
tempNode = currentNode->next;
currentNode->next = insertNode;
insertNode->next = tempNode;
}
Link ** search_key2(int k,Link *Node)
{
Link *pt[3];
*(pt+0) = NULL;
*(pt+1) = NULL;
*(pt+2) = NULL;
Link * search_pt = Node;
while(search_pt != NULL)
{
*(pt+1) = search_pt;
if(search_pt->a == k)
{
printf("找到Node,記憶體=%x,內容值
=%x,value=%d,Next=%x\n",&search_pt,search_pt,search_pt->a,search_pt->next);
if(search_pt->next != NULL)
*(pt+2) = search_pt->next;
break;
}
if(search_pt->next != NULL)
*(pt+0) = search_pt;
search_pt = search_pt->next;
}
return pt;
}
void main()
{
//建立連結串列
Link *Node[10] ;
int i=0,k=10;
while(i<k)
{
*(Node+i) = createNewNode(i);
i++;
}
i=0;
while(i<(k-1))
{
LinkNode(*(Node+i),*(Node+i+1));
i++;
}
//印出連結串列
print_link(*(Node+0));
//-------新增與刪除node--------------------------------
Link *currentNode = NULL;
//插入一個node
Link *insertNode = createNewNode(500);
currentNode = search_key1(9, *(Node +0) ); //有找到回傳指標,否則為NULL
if(currentNode != NULL)
insertOneNode(currentNode,insertNode);
//印出連結串列
print_link(*(Node+0));
Link ** pt;
pt = search_key2(8, *(Node +0) );
printf("%d\n", (*(pt+0))->a );
printf("%d\n", (*(pt+1))->a );
printf("%d\n", (*(pt+2))->a );
//釋放連結串列記憶體
freeALLNode(*(Node+0));
}
補充說明:
原始程式我把它簡化了, 仍然不懂 這裡面出了什麼問題:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int a;
struct node * next;
};
typedef struct node Link;
Link ** search_key2(Link *Node1,Link *Node2)
{
Link * pt[2];
*(pt+0) = Node1;
*(pt+1) = Node2;
return pt;
}
void main()
{
Link * Node1 = (Link *) malloc(sizeof(struct node));
Node1->a = 10;
Node1->next = NULL;
Link * Node2 = (Link *) malloc(sizeof(struct node));
Node2->a = 10;
Node2->next = NULL;
Link ** p ;
p = search_key2(Node1,Node2);
printf("%d\n", (*(p+0))->a );
printf("%d\n", (*(p+1))->a );
}
感謝..麻煩大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.226.206
※ 編輯: WishSmile 來自: 61.230.226.206 (10/17 19:24)
※ 編輯: WishSmile 來自: 61.230.226.206 (10/17 19:26)
→
10/17 20:49, , 1F
10/17 20:49, 1F
→
10/17 20:50, , 2F
10/17 20:50, 2F
※ 編輯: WishSmile 來自: 61.230.226.206 (10/17 21:01)
→
10/17 21:00, , 3F
10/17 21:00, 3F
→
10/17 21:02, , 4F
10/17 21:02, 4F
→
10/17 21:04, , 5F
10/17 21:04, 5F
→
10/17 21:05, , 6F
10/17 21:05, 6F
→
10/17 21:08, , 7F
10/17 21:08, 7F
→
10/17 21:10, , 8F
10/17 21:10, 8F
→
10/17 21:22, , 9F
10/17 21:22, 9F
→
10/17 21:23, , 10F
10/17 21:23, 10F
→
10/17 21:38, , 11F
10/17 21:38, 11F
→
10/17 21:38, , 12F
10/17 21:38, 12F
→
10/17 21:40, , 13F
10/17 21:40, 13F
→
10/17 21:41, , 14F
10/17 21:41, 14F
→
10/17 21:42, , 15F
10/17 21:42, 15F
→
10/17 21:42, , 16F
10/17 21:42, 16F
→
10/17 21:43, , 17F
10/17 21:43, 17F
→
10/17 21:44, , 18F
10/17 21:44, 18F
→
10/17 21:46, , 19F
10/17 21:46, 19F
推
10/17 23:53, , 20F
10/17 23:53, 20F