下面这些都是垃圾代码,我的大脑一开始拒绝直接操作节点,因为这些操作都会影响原来链表的数据,我要再想想
#includeusing namespace std; class ListNode { public: int val; ListNode *nextNodePointer; ListNode() : val(0), nextNodePointer(nullptr) {} ListNode(int x) : val(x), nextNodePointer(nullptr) {} ListNode(int x, ListNode *nextNodePointer) : val(x), nextNodePointer(nextNodePointer) {} }; void show(ListNode* List) { ListNode* accessNode = List; //访问List用的指针 while(accessNode != nullptr) { cout<< accessNode->val << " -> "; accessNode = accessNode->nextNodePointer; } cout<< "nullptr" << endl; } ListNode *merge_and_sort_two_list(ListNode* l1 = nullptr, ListNode *l2 = nullptr) { //方案一:把l2级联到l1上,整体换值排序l1,返回l1 if(l1 == nullptr) { l1 = l2; } else { ListNode* lastNodePointer = l1; while(lastNodePointer->nextNodePointer != nullptr) lastNodePointer = lastNodePointer->nextNodePointer; lastNodePointer->nextNodePointer = l2; } //此处需要写一个排序l1的程序 //返回l1 } int main(int argc, char* argv[]) { int a[4] = {4,7,2,1}; int b[4] = {7,5,6,8}; ListNode *List1 = nullptr; ListNode *List2 = nullptr; int i = 0; while(i < 4) { List1 = new ListNode(a[i], List1); List2 = new ListNode(b[i], List2); i = i+1; } show(List1); show(List2); ListNode* List = merge_and_sort_two_list(List1,List2); show(List); return 0; }
这样的代码有啥用?
ListNode *merge_two_sorted_list(ListNode* l1 = nullptr, ListNode *l2 = nullptr)
{
if(l1 == nullptr) return l2;
if(l2 == nullptr) return l1;
if(l1->val < l2->val)
{
l1->nextNodePointer = merge_two_sorted_list(l1->nextNodePointer,l2);
return l1;
}
else
{
l2->nextNodePointer = merge_two_sorted_list(l1,l2->nextNodePointer);
return l2;
}
}



