第一步:根据给的有序数组,用尾插法新建一个有序链表。
第二步:通过双指针找到结点应该插入位置的前驱和后继。
第三步:插入该结点。
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;
}

京公网安备 11010502036488号