Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29125
  • 博文数量: 16
  • 博客积分: 600
  • 博客等级: 上士
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-21 13:21
文章分类

全部博文(16)

文章存档

2011年(1)

2008年(15)

我的朋友
最近访客

分类: C/C++

2008-03-09 16:04:20

双链表的插入操作的核心代码的理解:

   pin指针指向第i-1个位置,s是当前要插入元素的指针;我们写代码的要求是:

首先对这个要插入元素的priornext进行赋值,之所以这样子.是为了确保还能够对第i个元素进行访问(甚至是更后面的元素),故一开始不能把pin->next赋值,而是如上所说的操作是正确的.这里相当于一个拆桥的问题,怎么样拆还能过去.当完成之后,自然就能通过s->next->prior来访问或连接到第i个元素,这时就可以pin->next=s.最后还有一个问题:i位置可能是最后的元素.此时只要一个判断就行了.不是则进行,s->next->prior=s.

   这段代码如下:

    Node<T>* pin=head,*s;

    int flag=1;

    while(flag!=i)//i表示要插入的位置

   {

     flag++;pin=pin->next;

   }

    s=&g;//g是要添加的对象,是一个变量.
    s->prior=pin;
    s-next=pin->next;
    s->next->prior=s;
    pin->next=s;
    cout<<"添加完成"<<endl;

这里还有一个有意思的现象:当插入位置是最后时,s-next=pin->next;相当于一个链表尾的传递,注意双链表的特点是,结点没有前驱的结点,尾结点没有后继的结点.

 

阅读(688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~