带头结点链表的第一个结点是头结点?还是头结点的下一个结点?
1个回答
展开全部
吧
设链表结点结构
typedef struct Node{
DataType data;
struct Node *next; //下一个结点
struct Node *prev; //上一个结点
}Node;
若head为头结点指针
则
Node *p1,*p2;
p1 = head->next; //p1为第一个结点
p2 = p1->next; //p2为第二个结点
p2->next->prev = p1; //第二个结点的后继(第三个结点)的前驱为第一个结点
p1->next = p2->next; //第一个结点的后继为第二个结点的后继(第三个结点)
p1->prev = p2; //第一个结点的前驱为第二个结点
p2->next = p1; //第二个结点的后继为第一个结点
p2->prev = head; //第二个结点的前驱为头结点
head->next = p2; //头结点的后继为第二个结点
完毕 ,以上是用两个临时指针的方法,更自由,下面是一个临时指针的方法
Node *p;
p = head->next; //p为第一个结点
p->next->next->prev = p; //第三个结点的前驱为第一个结点
p->next->prev = head; //第二个结点的前驱为头结点
p->prev = p->next; //第一个结点的前驱为第二个结点
head->next = p->next; //头结点的后继为第二个结点 ---×
p->next = p->next->next; //第一个结点的后继为第三个结点
head->next->next = p; //第二个结点(×行中以转为头结点的后继)的后继为第一个结点
完毕
设链表结点结构
typedef struct Node{
DataType data;
struct Node *next; //下一个结点
struct Node *prev; //上一个结点
}Node;
若head为头结点指针
则
Node *p1,*p2;
p1 = head->next; //p1为第一个结点
p2 = p1->next; //p2为第二个结点
p2->next->prev = p1; //第二个结点的后继(第三个结点)的前驱为第一个结点
p1->next = p2->next; //第一个结点的后继为第二个结点的后继(第三个结点)
p1->prev = p2; //第一个结点的前驱为第二个结点
p2->next = p1; //第二个结点的后继为第一个结点
p2->prev = head; //第二个结点的前驱为头结点
head->next = p2; //头结点的后继为第二个结点
完毕 ,以上是用两个临时指针的方法,更自由,下面是一个临时指针的方法
Node *p;
p = head->next; //p为第一个结点
p->next->next->prev = p; //第三个结点的前驱为第一个结点
p->next->prev = head; //第二个结点的前驱为头结点
p->prev = p->next; //第一个结点的前驱为第二个结点
head->next = p->next; //头结点的后继为第二个结点 ---×
p->next = p->next->next; //第一个结点的后继为第三个结点
head->next->next = p; //第二个结点(×行中以转为头结点的后继)的后继为第一个结点
完毕
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询