双向链表的插入

问题:

    给定一个已排序的双向链表,向其中插入一个元素。

solution:

struct ListNode {
    int val;
    ListNode *prev;
    ListNode *next;
};

int insert(ListNode *head, int value)
{
    ListNode *cur;
    ListNode *next;
    for (cur = head; (next = cur->next) != NULL; cur = next)
    {
        if (next->val == value)
            return 0;
        if (next->val > value)
            break;
    }

    ListNode *newNode = new ListNode;
    newNode->val = value;

    newNode->next = next;
    cur->next = newNode;
    if (cur != head)
        newNode->prev = cur;
    else
        newNode->prev = NULL;
    if (next != NULL)
        next->prev = newNode;
    else
        head->prev = newNode;
    return 1;
}

有两点需要注意:

1. 声明一个头结点head,其中head->prev指向链表最后一个结点,head—>next指向链表第一个结点。

2. 当插入元素和链表中元素重复时,不执行插入操作。

reference:

《C和指针》

转载于:https://www.cnblogs.com/gattaca/p/4748738.html

猜你喜欢

转载自blog.csdn.net/weixin_34238633/article/details/93401955