数据结构题目30:在双向循环列表中插入新结点

题目:在带有头结点的双向循环列表中第1个数据域内容为x的结点右边插入一个数据信息为item的新结点

解题思路:

  1. 找到数据内容为x的结点,由指针变量q指向该结点
  2. 申请一个新的结点,由p指向该结点
  3. 设置p,p->data=item;把q->rlink送p->llink,把q->rlink->llink送p->rlink;把p送q->rlink-llink,把p送q->rlink。

具体算法实现如下:
这里有用到createTwowayList(5)建立一个双链表

function insertd(list, x, item) {
    let p, q

    q = list.rlink
    while(q!=list&&q.data!=x){
        q = q.rlink
    }
    if (q==list) {
        console.log("链表中无满足条件的结点!")
        return -1
    }

    p = new Node(item, null, null)
    p.llink = q
    p.rlink = q.rlink
    q.rlink.llink = p
    q.rlink = p

    return list
}

var twowayList = createTwowayList(5)

var r_list = insertd(twowayList, 2, 'aa')
console.log("操作后为:", toString(r_list))

你可能感兴趣的:(数据结构题目30:在双向循环列表中插入新结点)