算法导论10.2-7习题解答(单链表逆转)

CLRS 10.2-7 :
在O(n)时间内对给定的单链表进行逆转。

解法:

这题没什么技巧,就是将指针的指向进行改变即可。

#include < iostream >
using namespace std;

// 很简单的Node 和 List
class Node
{
public :
  Node
* next;
  int data;

  Node();
  Node(
int d);
};

class List
{
public :
  Node
* first;

  List();
  void insert( int d);
};

int main()
{
  int K = 5 ;
  List
* list = new List();

  for ( int i = 0 ; i < 5 ; i ++ )
  {
    list
-> insert(i);
  }

  Node
* before = list -> first;
  Node
* after = before -> next;
  before
-> next = NULL;
  while (after)
  {
    // 交换指针
    Node * temp = after -> next;
    after
-> next = before;
    before
= after;
    after
= temp;
  }
  // 把最后的before赋给list->first
  list -> first = before;

  Node
* x = list -> first;
  while (x)
  {
    cout
<< x -> data << endl;
    x
= x -> next;
  }
  return 0 ;
}

Node::Node()
{
  next
= NULL;
}

Node::Node(
int d)
{
  data
= d;
  next
= NULL;
}

List::List()
{
  first
= NULL;
}
// 插入节点的操作
void List::insert( int d)
{
  Node
* node = new Node(d);

  if (first == NULL)
    first
= node;
  else
  {
    Node
* temp = first -> next;
    Node
* prev = first;
    while (temp != NULL)
    {
      prev
= temp;
      temp
= temp -> next;
    }
    prev
-> next = node;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值