创建一个双向链表。初始化前 15 个节点
Posted
技术标签:
【中文标题】创建一个双向链表。初始化前 15 个节点【英文标题】:Creating a double link list. Initializing the first 15 nodes 【发布时间】:2013-02-19 03:01:46 【问题描述】:我的插入方法应该将 P 作为第一个值 (0) 和 15 作为链接列表的最后一个值。虽然,当我打印出我的列表时,我必须通过 p->succ 而不是 p-prev 来打印出项目,它会打印出 15, 14, 13....;这是正确的吗?还是我执行的功能有误?
class Node
public:
int value;
Node *succ;
Node *prev;
Node(int val, Node *s=NULL, Node *p=NULL)
:value(val),succ(s),prev(p)
Node *insert(Node *p,Node *n)
if(n==NULL)
return p;
if(p==NULL)
return n;
n->succ=p;
if(p->prev)
p->prev->succ=n;
n->prev=p->prev;
p->prev=n;
return n;
int main(int argc, char *argv[])
Node *p= NULL;
for(int i = 0; i<=15; i++)
p = insert(p, new Node(i));
while(p)
cout<<p->value;
head=p->succ;
【问题讨论】:
【参考方案1】:您在开始时添加节点。所以很明显,最后添加的将是第一个。如果希望节点按照添加的顺序添加,则需要在末尾添加节点。
Node *insert(Node *p,Node *n)
Node * ptr;
if(n==NULL)
return p;
if(p==NULL)
return n;
ptr = p;
// Traverse to the end of the list
while(ptr->succ)
ptr = ptr->succ;
ptr->succ = n;
n->prev = ptr;
return p;
【讨论】:
以上是关于创建一个双向链表。初始化前 15 个节点的主要内容,如果未能解决你的问题,请参考以下文章