问题:
给定一个已排序的双向链表,向其中插入一个元素。
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和指针》