链表反转

struct Node {
  int data;
  Node *ptr;
};
 
// 迭代
Node *reverse(Node *head) {
  if (head == NULL) { return NULL; }
 
  Node *pre, *cur, *n;
  pre = head;
  cur = head->ptr;
  while (cur) {
    n = cur->ptr;
    cur->ptr = pre;
    pre = cur;
    cur = n;
  }
  head->ptr = NULL;
  return pre;
}
 
// 递归
Node *reverse_r(Node *cur, Node *pre = NULL) {
  if (cur == NULL) { return NULL; }
 
  Node *tmp = cur->ptr;
  cur->ptr = pre;
  return tmp == NULL ? cur : reverse_r(tmp, cur);
}
datstructalgo/listreverse.txt · 最后更改: 2012/01/11 00:49 由 admin
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki