思路分析
链表:头节点为空,每个节点有一个指针,指向下一个节点的地址
俩链表节点之间比较,用遍历``for,因为是list,可以直接通过迭代器(指针)判断俩节点是否为NULL决定是否遍历结束
代码框架:
开辟存储数据的空间:
ListNode* dummyHead = new ListNode(-1);
ListNode* p = dummyHead;
ListNode* l1p = list1;
ListNode* l2p = list2;
对链表节点中的元素进行比较,需要遍历两个链表,这里用while
while(l1p!=NULL&&l2p!=NULL){}
元素之间比较有两种情况a<b和a>b,if
if(list1p->val < list2p->val){
p->next = list1p;
list1p = list1p->next;
}
else{
p->next = list2p;
list2p = list2p->next;
}
p = p->next;
俩list的长度可能不同,长的元素放在最后面
if(l1p != NULL)
p->next = list1p;
else
p->next = list2p;
整体代码
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummyHead = new ListNode(-1);
ListNode* p = dummyHead;
ListNode* l1p = l1;
ListNode* l2p = l2;
while(l1p != NULL && l2p != NULL){
if(l1p->val < l2p->val){
p->next = l1p;
l1p = l1p->next;
}
else{
p->next = l2p;
l2p = l2p->next;
}
p = p->next;
}
if(l1p != NULL)
p->next = l1p;
else
p->next = l2p;
ListNode* ret = dummyHead->next;
dummyHead->next = NULL;
delete dummyHead;
return ret;
}
};
总结
1.通过遍历迭代器指针代替常规的遍历元素
2.每个list都有一个iterator,可以通过iterator实现元素的轻松遍历
3.slist第一个val为空,第二个元素指向真实的第一个节点
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)