【leetcode 简单】第三十七书 相及链表

反转一个单链表。

编一个先后,找到两单单链表相交的开头节点。

示例:

 

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

比如,下面的少独链表

进阶:
君得迭代或递归地反转链表。你是否因此有限种植办法解决就道题?

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    if (NULL == head || NULL == head->next)
    {
        return head;
    }
    struct ListNode* a=head;
    struct ListNode* b=head->next;
    struct ListNode* c;

    head->next = NULL;
    while (b)
    {
        c = b->next;
        b->next = a;
        a = b;
        b = c;
    }
    head = a;
    return head;
}

于节点 c1 开始交。

 

 

注意:

  • 假设个别只链表没有交点,返回 null.
  • 每当返结果后,两个链表仍必须保持原来的结构。
  • 但是使整个链表结构被从来不循环。
  • 先后尽量满足 O(n) 时间复杂度,且只有用 O(1) 内存。

    /**

    • Definition for singly-linked list.
    • struct ListNode {
    • int val;
    • struct ListNode *next;
    • };
      /
      struct ListNode
      getIntersectionNode(struct ListNode headA, struct ListNode headB) {
      struct ListNode A=headA;
      struct ListNode
      B=headB;
      while(A!=B)
      {

       if (NULL == A)
       {
           A=headB;
       }
       else
       {
           A=A->next;
       }
       if (NULL == B)
       {
           B=headA;
       }
       else
       {
           B=B->next;
       }
      

      }
      return B;
      }

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图