大侠指教啊,为什么我的头指针老是指向队尾,哪里错了
typedef struct node
{
struct node *pre; //指向前一个结点指针
struct node *next; //指向下一个结点指针
char *data; //数据
int nlen; //数据长度
}Node;
//定义带头结点的双向链表
typedef struct doublyLinkedList
{
Node *head; //头指针
Node *rear; //尾指针
int size; //队列长度
}dLinkedList;
QUEUE_HANDLE creatlist(void)
{
dLinkedList *dLL = new dLinkedList;
if (dLL == NULL)
{
printf("开辟空间失败");
return NULL;
}
dLL->head = NULL;
dLL->rear = NULL;
dLL->size = 0;
return dLL;
}
//队列前插入结点
int insertHead(QUEUE_HANDLE phandle, char *pdata, int *plen)
{
dLinkedList *pL = (dLinkedList *)phandle;
Node *p = NULL;
if(pL == NULL)
{
printf("双向链表不存在/n");
return -1;
}
p = new Node;
// p = (Node*)malloc(sizeof(Node));
if(p == NULL)
{
printf("内存分配失败!/n");
return -1;
}
p->data = new char[*plen];
memcpy(p->data, pdata, *plen);
// p->data = pdata;
p->nlen = *plen;
if (pL->head == NULL)
{
pL->head = p;
pL->rear = p;
pL->size++;
}
else
{
p->next = pL->head;
if(pL->head != NULL)
{
pL->head->pre = p;
}
p->pre = NULL;
pL->head = p;
pL->size++;
}
return 0;
}
//队列后插入结点
int insertRear(QUEUE_HANDLE phandle, char *pdata, int *plen)
{
dLinkedList *pL = (dLinkedList *)phandle;
Node *p = NULL;
if(pL == NULL)
{
printf("双向链表不存在/n");
return -1;
}
p = new Node;
// p = (Node*)malloc(sizeof(Node));
if(p == NULL)
{
printf("内存分配失败!/n");
return -1;
}
p->data = new char[*plen];
memcpy(p->data, pdata, *plen);
p->data = pdata;
p->nlen = *plen;
if (pL->head == NULL)
{
pL->head = p;
pL->rear = p;
pL->size++;
}
else
{
pL->rear->next = p;
if(p != NULL)
{
p->pre = pL->rear;
}
p->next = NULL;
pL->rear = p;
pL->size++;
}
return 0;
}
//边插入边排序从小到大
int insertsortRearToHead(QUEUE_HANDLE phandle, char *pdata, int plen)
{
dLinkedList *pL = (dLinkedList *)phandle;
if (pL == NULL)
{
printf("双向链表不存在!");
return -1;
}
int nNowData = *(int *)(pdata + 4);
Node *pnode = new Node;
if (pnode == NULL)
{
printf("开辟空间失败!");
return -1;
}
pnode->data = new char[plen];
memcpy(pnode->data, pdata, plen);
pnode->nlen = plen;
pnode->next = NULL;
pnode->pre = NULL;
if(pL->head == NULL)
{
printf("双向链表为空,队尾插入数据!\n");
insertRear(pL, pdata, &plen);
int nheadData = *(int *)(pdata + 4);
return 0;
}
Node *p = NULL;
Node *q = NULL;
p = pL->rear;
bool bFlag = true;
while(p != NULL)
{
int ndata = *(int *)(p->data + 4);
if (nNowData >= ndata)
{
int nhead = *(int *)(pL->head->data + 4);
//printf("nhead%d ", nhead);
if (p == pL->rear)
{
insertRear(pL, pdata, &plen);
return 0;
}
else
{
pnode->pre = p;
pnode->next = q;
p->next = pnode;
q->pre = pnode;
pL->size++;
}
bFlag = false;
break;
}
else
{
q = p;
p = p->pre;
//continue;
}
}
if (bFlag = false)//p == NULL
{
insertHead(pL, pdata, &plen);
}
return 0;
}
[解决办法]