链表逆序 java_链表逆序(JAVA实现)

该博客介绍如何使用Java实现单向单链表的逆序操作。通过设置前后相邻的指针,逐步调整链表头和尾,最终完成逆序。提供详细步骤解释,包括图解、代码实现和测试过程。
摘要由CSDN通过智能技术生成

题目:将一个有链表头的单向单链表逆序

分析:

链表为空或只有一个元素直接返回;

设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继;

重复步骤2,直到q为空;

调整链表头和链表尾;

图解:

以链表A->B->C->D为例,逆序此链表。

0.初始状态                                                        1.2.3 循环部分

p = head->next;                                              while(q!=null){

q = head->next->next;                                      t = q->next;

t = null;                                                            q->next = p;

p = q;

q = t;

}

0.初始状态

f3eacfc3d3811a5547f065281b098705.png

1.第一次循环

4bb0316fc57f08b8f9af28162cbf8be7.png

2.第二次循环

377fffd464a86af6ec9e15d3dadf8d84.png

3.第三次循环

f548fc28642a4e629cff74bc2ba10c96.png

4.q==null循环结束

head->next->next = null;//设置链表尾

head-next = p;//修改链表头

f8e07d7657e7e00809c69b1b70d16650.png

实现及测试代码

节点Node类:

packagelinkList.reverse;/*** 链表节点

*@authorAdministrator

**/

public classNode {private Integer data;//节点数据域

private Node next;//节点指针域

publicInteger getData() {returndata;

}public voidsetData(Integer data) {this.data =data;

}publicNode getNext() {returnnext;

}public voidsetNext(Node next) {this.next =next;

}

}

逆序方法:

/***

*@paramnode 原始链表头节点

*@return逆序后链表头节点*/Node reverseList(Node head){//如果链表为空或只有一个元素直接返回

if(head.getNext()==null||head.getNext().getNext()==null){returnhead;

}

Node p=head.getNext();

Node q=head.getNext().getNext();

Node t= null;while(q!=null){

t=q.getNext();

q.setNext(p);

p=q;

q=t;

}//设置链表尾

head.getNext().setNext(null);//修改链表头

head.setNext(p);returnhead;

}

测试代码:

//表头

Node head = newNode();

head.setData(-1);

head.setNext(null);//定义指针

Node p;

p=head;//初始化链表数据[1~10]

for(int i=1;i<=10;i++){

Node q= newNode();

q.setData(i);

q.setNext(null);

p.setNext(q);

p=q;

}//输出原始链表

printList(head);

System.out.println("");//输出逆序后的链表

printList(reverseList(head));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值