public class Linktest {
专注于为中小企业提供成都做网站、成都网站制作、成都外贸网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业上林免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
//反转方法 ,传入一个链表
public static LinkNode reversal(LinkNode list){
//pre用来存放前一个链表节点
LinkNode pre =list;
//取出下一个链表节点 ,cru 用来存放当前链表节点
LinkNode cru = list.getNext();
//next用来存放下一个链表节点
LinkNode next;
//如果当前节点不为空(这里意思是 如果传进来的list 有下一个节点就继续执行)
while(null!=cru){
//取出当前节点的下一个节点
next = cru.getNext();
//把前一个节点赋予当前节点的下一个节点(这里产生实际改变)
cru.setNext(pre);
//把当前节点变量赋予前一个节点的变量
pre=cru;
//把下一个节点变量赋予当前
cru = next;
}
//循环体内会循环到方法传入的LinkNode 没有前一个节点为止
//因为几次交换的原因
//因为循环结束,所以把next赋空
list.setNext(null);
//因为循环的原因,前一个节点实际是第一个节点
list=pre;
//返回第一个节点
return list;
}
public static void main(String[] args) {
LinkNode head = new LinkNode(0);
LinkNode tmp = null;
LinkNode cur = null;
for (int i = 1; i 10; i++) {
tmp = new LinkNode(i);
if (1 == i) {
head.setNext(tmp);
} else {
cur.setNext(tmp);
}
cur = tmp;
}
LinkNode h = head;
while (null != h) {
System.out.print(h.getVal() + " ");
h = h.getNext();
}
head = reversal(head);
System.out.println("\n**************************");
//打印反转后的结果
while (null != head) {
System.out.print(head.getVal() + " ");
head = head.getNext();
}
}
}
ListItem* reverseList(ListItem *pHead){
ListItem *p1,*p2;
p1=pHead;
p2=0;
while(p1!=0){
pHead=p1;
p1=p1-next;
pHead-next=p2;
p2=pHead;
}
return pHead;
}
不知道你是需要用STL来写还是类似C的写法,给个简单的例子吧#include "stdafx.h"
#include "malloc.h"
#include "ostream.h"typedef struct _Node
{
int value;
_Node * pNext;
}Node;Node * InitList()
{
Node * pHead = (Node*)malloc(sizeof(Node));
Node * pNode = pHead;
pHead-value = 0;
for(int i = 1; i 50; i )
{
pNode-pNext = (Node *)malloc(sizeof(Node));
pNode = pNode-pNext;
pNode-value = i;
pNode-pNext = NULL;
}
return pHead;
}
//返回尾节点
Node * Revert1(Node * pHead)
{
Node * pfather = pHead;
Node * pNode;
if(!pfather) return NULL;
pHead = pHead-pNext;
pfather-pNext = NULL;
while(pHead != NULL)
{
pNode = pHead-pNext;
pHead-pNext = pfather;
pfather = pHead;
pHead = pNode;
}
return pfather;
}
//返回尾节点
Node * Revert2(Node * pHead, Node * pfather = NULL)
{
Node * ret = NULL;
if(!pHead) return NULL;
if(pHead-pNext)
ret = Revert2(pHead-pNext, pHead);
pHead-pNext = pfather;
if(!ret)
return pHead;
else
return ret;
void reverse()
{
Node *prev,*current;
prev=head; //从头结点开始处理
if(head==NULL) return;
for(current=prev-next;current!=NULL;current=current-next) //顺序处理结点
{
current-next=prev; //下一个结点的next指点上一个结点,即将链表反转
prev=current; //保存上一个结点
}
head=prev; //head为最后一个结点
}
假设链表的节点定义如下:
class Node{
int i;
Node next;
}
那么其反转函数为:
void reverse(Node l){
if(l==null) return;
Node p=null,q=l,r=l.next;
while(r!=null){
q.next=p;
p=q;
q=r;
r=r.next;
}
q.next=p;
l=q;
}
单链表的反转,参考下吧
static Node reverse(Node x) {
Note t, y = x, r = null;
while(y != null) {
t = y.next; y.next = r; r = y; y = t;
}
return r;
}