链表OJ(2)

链表中倒数第k个结点

struct ListNode* FindKthTotail(struct ListNide* pListHead,int k){
  struct ListNode* slow,*fast;
  slow=fast=pListHead;
  while(k--)
  {
     //fast还没有走出k步,列表没有k步长
     if(fast==NULL)
        return NULL;
     fast=fast->next;
   }//fast先走k步
   while(fast)
   {
      slow=slow->next;
      fast=fast->next;
    }
    return slow;
}

合并两个有序链表

将两个升序链表合并成一个新的升序链表并返回。
归并:从头比较,取小的尾插到新链表

struct ListNode* mergeTwoLists(struct ListNode* list1,struct ListNode* list2){
      struct ListNode* head,*tail;
     head=tail=NULL;
     while(list1&&list2)
     {
          if(list1->val<list2->val)
          {
             if(tail==NULL)
             {
               head=tail=list1;
              }
              else
              {
                tail->next=list1;
                tail=tail->next;
               }
               list2=list2->next;
          }
     }    
     if(list1)
       tail->next=list1;
     if(list2)
       tsil->next=list2;
       return head;
}                  

你可能感兴趣的:(1024程序员节)