[动手写code] 链表反转

来源:互联网 发布:golang reflect.value 编辑:程序博客网 时间:2024/04/30 23:12

1. 要求

    反转一个链表,private LinkNode* reverse(LinkNode* p);

2. Code

private LinkNode* reverse(LinkNode* p) {  if(p == NULL) {    return p;  }  LinkNode* prev = NULL; // 在头结点前面虚拟1个空节点  LinkNode* next = p->next; // 记录后面的节点  while(next) { // 后面还有节点     p->next = prev; //将p指向prev     prev = p; // 后移     p = next;     next = p->next;  }  p->next = prev; // 后面已经没有节点了,只要将p指向prev就可以了  return p;}

private LinkNode* reverse(LinkNode* p) {  return reverse(NULL, p);}private LinkNode* reverse(LinkNode* prev, LinkNode* p) {  if(p == NULL) {    return p;  }  LinkNode* next = p->next;  p->next = prev;  if(next == NULL) {    return p;  } else {    return reverse(p, next);  }}

3. 说明

    每次反转一个链接,记录后面的节点,反转后,向后移动。初始在最前面虚拟一个空节点,最后当后面没有节点的时候,只需要反转节点即可。

0 0
原创粉丝点击