[剑指Offer]25-合并两个排序链表

题目链接

https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?tpId=13&tqId=11169&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

题意

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

解题思路

一个个把节点合并过去。
注意鲁棒性。

相关知识

关于保证鲁棒性:

  • 写的时候考虑空指针等情况,做“防御性编程”。
  • 写完再复查一遍。
  • (写前)想几个测试用例,写完检查。

代码

/*struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(!pHead){
            return nullptr;
        }
        if(!pHead->next){
            return pHead;
        }
        
        ListNode* pCurrent;
        ListNode* pBefore;
        ListNode* pBehind;
               
        pCurrent=pHead;
        while(pCurrent->next){
            if(pCurrent==pHead){
                pBefore=nullptr;
            }
            //更新当前节点
            pBehind=pCurrent->next;
            pCurrent->next=pBefore;
            
            //初始化下一个节点
            pBefore=pCurrent;
            pCurrent=pBehind;
        }
        pCurrent->next=pBefore;
        return pCurrent;
    }
};

posted on 2019-03-08 12:00  coding_gaga  阅读(105)  评论(0编辑  收藏  举报

导航