typedef struct Dlist //链表结构体
{
Dlist* p_head;
int data;
Dlist* p_last;
}Dlist;
void Initialization(int data, Dlist ** list) //初始化链表
{
Dlist * p = new Dlist;
p->data = data;
p->p_last = NULL;
p->p_head = NULL;
*list = p;
}
void InsertNode_head(int data, Dlist ** list) //头部插入
{
while ((*list)->p_last != NULL)
{
(*list)->p_last = (*list)->p_last->p_last;
}
Dlist * p = new Dlist;
p->data = data;
p->p_last = NULL;
p->p_head =*list;
(*list)->p_last = p;
*list = p;
}
void InsertNode_end(int data,Dlist**list) //尾部插入
{
while ((*list)->p_head != NULL)
{
(*list)->p_head = (*list)->p_head->p_head;
}
if ((*list)->p_head = NULL)
{
printf("我是空");
}
Dlist * p = new Dlist;
p->data = data;
p->p_last = *list;
p->p_head = NULL;
(*list)->p_head = p;
}void print(Dlist * list) //打印数据
{
while (list->p_last!=NULL)
{
list->p_last = list->p_last->p_last;
}
while (list->p_head!= NULL)
{
printf("%d\n", list->data);
list = list->p_head;
}
printf("最后一个数是:");
printf("%d", list->data);
}
//函数原型 void InsertNode(int data, Dlist * list); 其中data是需要插入的数据,list是链表的结构体指针
//链表的结构体中有如下内容 typedef struct Dlist { Node* p_head; Node* p_last; }Dlist;
int main()
{
Dlist* list = new Dlist;
Initialization(1, &list);
InsertNode_head(2, &list);
InsertNode_head(4, &list);
InsertNode_end(4, &list);
print(list);
getchar();
}
结果显示:
4
最后一个数:4
如果不用尾插函数一切正常,如果用了,显示结果就不正常,求大神解答
首先,P_Last这个名字我给你换了,因为它会误导人,双链表的前驱节点指针应该叫Prev(ious),而Last这个单词表示最后的意思,
#include <iostream>
using namespace std;
typedef struct Dlist
{
Dlist* p_Prev;
int data;
Dlist* p_Next;
}Dlist;
void Initialization(int data, Dlist ** list)
{
Dlist * p = new Dlist;
p->data = data;
p->p_Next = NULL;
p->p_Prev = NULL;
*list = p;
}
void InsertNode_head(int data, Dlist ** list)
{
Dlist * p = new Dlist;
p->data = data;
p->p_Next = *list;
p->p_Prev = NULL;
*list = p;
}
void InsertNode_end(int data,Dlist*list)
{
while (list->p_Next != NULL)
{
list = list->p_Next;
}
Dlist * p = new Dlist;
p->data = data;
p->p_Next = NULL;
p->p_Prev = list;
list->p_Next = p;
}
void print(Dlist*list)
{
while (list != NULL)
{
cout << list->data << " ";
list = list->p_Next;
}
}
int main()
{
Dlist* list = new Dlist;
Initialization(1, &list);
InsertNode_head(2, &list);
InsertNode_head(4, &list);
InsertNode_end(4, list);
print(list);
getchar();
}
4 2 1 4