第一步:根据给的有序数组,用尾插法新建一个有序链表。
第二步:通过双指针找到结点应该插入位置的前驱和后继。
第三步:插入该结点。
struct ListNode* insert(int* A, int ALen, int val ) { struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode)); //新建头结点 int i = 0; head->val = A[0]; //头结点赋值 struct ListNode* rear = head; //尾指针指向头结点 for(i = 1; i < ALen; i++){ //从元素A[1]开始插入 struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode)); //每个元素都要新建一个结点 p->val = A[i]; //结点赋值 rear->next = p; //两步式尾插法 rear = p; } struct ListNode* pre = head; //为了找到新插入结点的前驱位置 struct ListNode* q = head->next; //为了找到新插入结点的后继位置 while(q != NULL && q->val < val){ pre = q; //两指针同步移动 q = q->next; //q最多到链尾之后的空结点,pre最多会移到最后一个结点处 } struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode)); s->val = val; //给要插入的结点赋值 pre->next = s; //两步式尾插法 s->next = q; } return head; }