コード例 #1
0
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
	int Len1, Len2, i;

	if (headA == NULL || headB == NULL)
		return NULL;

	Len1 = GetLengthOfList(headA);
	Len2 = GetLengthOfList(headB);
	
	if (Len1 > Len2)
	{
		for (i = 0; i < Len1 - Len2; ++i)
			headA = headA -> next;
	}

	if (Len2 > Len1)
	{
		for (i = 0; i < Len2 - Len1; ++i)
			headB = headB -> next;
	}

	while (headA != NULL)
	{
		if (headA -> val == headB -> val)
			return headA;

		headA = headA -> next;
		headB = headB -> next;
	}

	return NULL;
}
コード例 #2
0
 ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
     if(pHead1==nullptr || pHead2==nullptr){
         return nullptr;
     }
     unsigned int len1 = GetLengthOfList(pHead1);
     unsigned int len2 = GetLengthOfList(pHead2);
     
     int lengthDiff = len1-len2;
     ListNode* pListHeadLong = pHead1;
     ListNode* pListHeadShort = pHead2;
     if(len2>len1){
         pListHeadLong = pHead2;
         pListHeadShort = pHead1;
         lengthDiff = len2-len1;
     }
     for(int i=0;i<lengthDiff;i++){
         pListHeadLong=pListHeadLong->next;
     }
     while(pListHeadLong!=nullptr && pListHeadShort!=nullptr){
         if(pListHeadLong==pListHeadShort){
             break;
         }else{
             pListHeadLong=pListHeadLong->next;
             pListHeadShort=pListHeadShort->next;
         }
     }
     return pListHeadLong;
 }
コード例 #3
0
struct ListNode* reverseKGroup(struct ListNode* head, int k) {
  if (k <= 1 || head == NULL || head -> next == NULL)
    return head;

  int RoundOfReverse, Len;
  int i, j;
  List NewList;
  Position PtrBeforeEnd, PtrSubBegin, PtrPre, PtrCur, PtrNext;

  Len = GetLengthOfList(head);

  if (Len < k)
    return head;

  RoundOfReverse = Len / k;
  PtrPre = head;
  PtrCur = head -> next;

  for (i = 0; i < RoundOfReverse; ++i)
  {
    PtrSubBegin = PtrPre;
    for (j = 1; j < k; ++j)
    {
      PtrNext = PtrCur -> next;
      PtrCur -> next = PtrPre;
      PtrPre = PtrCur;
      PtrCur = PtrNext;
    }

    if (i == 0)
      NewList = PtrPre;
    else
    {
      PtrBeforeEnd -> next = PtrPre;
    }

    PtrSubBegin -> next = PtrCur;
    PtrBeforeEnd = PtrSubBegin;

    PtrPre = PtrCur;
    if (PtrCur != NULL)
      PtrCur = PtrCur -> next;
  }

  return NewList;
}