数据结构算法(1):两个递增有序表合并成一个递增有序表

题目

两个递增有序表合并成一个递增有序表

算法思路

在这里插入图片描述

代码展示

bool merge(Sqlist A ,Sqlist B , Sqlist &c){
if(A.length+B.length > C.length) //判断如果A的程度+B的长度>C的长度  ,出错。
	return false;
int i=j = k=0;
while(i<A.length && j<B.length){
	if(A.data[i]<B.data[j]){//如果A[0]小于B[0],就把A[0]放到C[0]的位置上
		C.data[k]=A.data[i];  
		k++; //往后移动
		i++;
	}
	else{
		C.data[k]=B.data[J];
		k++;
		j++;
	}
while(i<A.length){
	C.data[k]=A.data[i];
	k++;
	i++;
}
while(i<B.length){
	C.data[k]=B.data[J];
	k++;
	j++;	
}
return true;
}
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用合并两个排序链的方法来将两个递增的单链合并一个递增的单链。首先分别定义两个指针来指向两个的头结点,然后比较指针指向的节点值,将值较小的节点添加到新链中,并将指针指向下一个节点,直到两个指针均到达链尾部。 ### 回答2: 算法步骤如下: 1. 首先,创建一个新的单链,用来存放合并后的链。 2. 定义两个指针p和q分别指向两个递增单链的头节点。 3. 比较p和q指针所指节点的值,将较小值的节点添加到新的单链中,并将指针向后移动一位。 4. 当其中一个遍历结束时,将另一个剩余的节点添加到新的单链中。 5. 返回新的单链即为合并后的递增单链。 具体实现如下所示: ```python # 定义节点类 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def mergeTwoLists(l1, l2): # 创建一个dummy节点作为新链的头节点 dummy = ListNode(0) p = l1 q = l2 current = dummy # 循环比较两个的节点值,并将较小值的节点添加到新链中 while p and q: if p.val < q.val: current.next = p p = p.next else: current.next = q q = q.next current = current.next # 将剩余的节点添加到新链中 if p: current.next = p if q: current.next = q # 返回新链中去掉dummy节点后的头节点 return dummy.next ``` 时间复杂度:合并两个需要遍历所有节点,时间复杂度为O(m + n),其中m和n分别为两个的长度。 空间复杂度:只使用了常数级别的额外空间,空间复杂度为O(1)。 ### 回答3: 将两个递增的单链合并一个递增的单链的方法是,首先定义一个新的单链,然后分别定义两个指针,分别指向两个原始链的头结点。通过比较两个指针所指节点的值,将值较小的节点加入到新的链中,并将指针指向下一个节点。重复这个过程,直到其中一个为空。然后将另一个非空链剩余的节点直接添加到新的链的末尾。 具体实现如下: 1. 创建一个新链,定义一个头指针和一个当前指针,将头指针指向新链的头节点。 2. 分别定义两个指针p和q,p指向第一个的头结点,q指向第二个链的头结点。 3. 循环比较p和q指向的节点的值,将值较小的节点接入新链,并将指针后移。 4. 当p或q其中一个指针为空时,停止循环。 5. 若p非空,则将p后面的节点全部接入新链。 6. 若q非空,则将q后面的节点全部接入新链。 7. 返回新链的头节点。 代码示例: ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def merge_two_lists(l1: ListNode, l2: ListNode) -> ListNode: dummy = ListNode(0) # 创建一个哑结点作为新链的头节点 cur = dummy # 当前结点指针 while l1 and l2: if l1.val <= l2.val: cur.next = l1 l1 = l1.next else: cur.next = l2 l2 = l2.next cur = cur.next if l1: cur.next = l1 if l2: cur.next = l2 return dummy.next ``` 以上代码通过比较两个的节点值大小,不断将较小的值的节点添加到新链中,直到其中一个为空。然后直接将另一个剩余的部分添加到新链的末尾。最后返回新链的头节点,即为合并后的递增单链
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值