合併兩個有序連結串列(LeetCode 21. Merge Two Sorted Lists)
阿新 • • 發佈:2018-12-22
雙指標連結串列解法:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *l3=NULL; ListNode *p1; ListNode *p2; while((l1!=NULL)&&(l2!=NULL)) { if(l1->val < l2->val){ if(l3==NULL) { p1=(ListNode *)malloc(sizeof(ListNode)); //再重申請一個節點 p1->val=l1->val; l3=p1; p2=p1; l1=l1->next; } else{ p1=(ListNode *)malloc(sizeof(ListNode)); //再重申請一個節點 p1->val=l1->val; p2->next=p1; p2=p1; l1=l1->next; } p2->next=NULL; } else { if(l3==NULL){ p1=(ListNode *)malloc(sizeof(ListNode)); //再重申請一個節點 p1->val=l2->val; l3=p1; p2=p1; l2=l2->next; } else{ p1=(ListNode *)malloc(sizeof(ListNode)); //再重申請一個節點 p1->val=l2->val; p2->next=p1; p2=p1; l2=l2->next; } p2->next=NULL; } } if(l1!=NULL){ if(l3==NULL){ l3=l1; } else p2->next=l1; } if(l2!=NULL){ if(l3==NULL) l3=l2; else p2->next=l2; } return l3; } };