链表相邻元素翻转

2018-10-14  本文已影响0人  小码弟

如题

思路:第一反应就是交换相邻两个节点的数据域,容易实现。但应记住第二种方法:交换指针域实现交换,如果链表有偶数个节点,交换相邻节点;如果有奇数个节点,交换除最后一个节点之外的其他相邻节点。


Snip20181014_2.png
void Reverse(LinkList head)
{
  if(head == NULL || head->next == NULL)
    return false;

  LNode* pre = head;
  LNode* cur = head->next;
  LNode* next = NULL;
  
  while(cur && cur->next)
  {
    next = cur->next->next; // 1)
    pre->next = cur->next;  // 2)
    cur->next->next = cur;  // 3)
    cur->next = next; // 4)
    pre = cur;
    cur = next;
  }
}

需要一次遍历:T(n) = O(n) , 空间=O(1)

上一篇下一篇

猜你喜欢

热点阅读