论坛首页 Java企业应用论坛

单向链表反转

浏览 6582 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (15) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-09   最后修改:2009-02-13
昨天遇到一个问题:如何遍历一次就反转一个单向链表。想了想也没什么好方法,用了很笨的一招,嘿嘿!将链表的各个节点得到并存在一个list中,然后倒序重组一下。感觉这个方法不是很好,不知道大家有什么好的方法,希望我这个破砖头能引出几块好玉来!
   发表时间:2009-02-09  
需要三个指针吧
0 请登录后投票
   发表时间:2009-02-09  
反转就是一个个取出,然后放到Stack里面吧?呵呵。
0 请登录后投票
   发表时间:2009-02-09  
myreligion 写道

反转就是一个个取出,然后放到Stack里面吧?呵呵。

可能用反转不太确切,比如链表是a→b→c→d,现在变成d→c→b→a,链表每个节点的前一个节点变为他的下一个节点。
0 请登录后投票
   发表时间:2009-02-09  
yangyi 写道

需要三个指针吧


太抽象,具体点.
0 请登录后投票
   发表时间:2009-02-09  
a-> b -> c-> d

a-> null b->c->d->null        | x->a
a->null  b->x  c->d->null     | y->b
a->null  b->x  c ->y  d->null | z->c
a->null  b->x  c->y   d->z
0 请登录后投票
   发表时间:2009-02-10  
抛出异常的爱 写道

a-> b -> c-> da-> null b->c->d->null        | x->aa->null  b->x  c->d->null     | y->ba->null  b->x  c ->y  d->null | z->ca->null  b->x  c->y   d->z

这样的话链表岂不是变成了:d→z→c→y→b→x→a ?
0 请登录后投票
   发表时间:2009-02-16  
dandy 写道
yangyi 写道

需要三个指针吧


太抽象,具体点.

Pointer p = head,q,k;
p -> next = q;
q -> next = k;
do{
q->next = p;
p = q;
if(k is end){
   k->next = q;
}else{
  q = k;
  k = k->next;
}
}while(k is not end)
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics