链表公共结点,搜索二叉树改为双向链表

1.两个链表,求第一个公共结点

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

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        ListNode* p1=pHead1;
        ListNode* p2=pHead2;
        int len1=0,len2=0,tmp=0;
        if((pHead1==NULL) || (pHead2==NULL))
            return NULL;
        while(p1!=NULL){
            p1=p1->next;
            len1++;
        }
        while(p2!=NULL){
            p2=p2->next;
            len2++;
        }
        p1=pHead1;
        p2=pHead2;
       
        if(len1 > len2){
           tmp=len1-len2; 
            while(tmp--){
                p1=p1->next;
            }
        }
        else{
            tmp=len2-len1;
            while(tmp--){
                p2=p2->next;
              }
            }
     
           while(p1!=NULL){ 
               if(p1==p2)
                   return p1;
            p1=p1->next;
            p2=p2->next;
           }
            return NULL;    
     }
    };

2.把一个搜索二叉树改为双向链表

思路:

      搜索二叉树中序遍历由小到大

struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};
class Solution {
public:
    TreeNode* Head=NULL;  //头指针 
    TreeNode* tmp=NULL;//遍历树时指针
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree==NULL)
            return NULL;
        Convert(pRootOfTree->left);
        if(Head==NULL){
            Head=pRootOfTree;
            tmp=pRootOfTree;
        }
        else{
            tmp->right=pRootOfTree;
            pRootOfTree->left=tmp;
            tmp=pRootOfTree;
        }
         Convert(pRootOfTree->right);
         return Head;
    }
};

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值