java版本剑指offer:反转链表
描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入:
{1,2,3}
返回值:
{3,2,1}
此题想考察的是:如何调整链表指针,来达到反转链表的目的。
初始化:3个指针:
- 1)pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向null
- 2)cur指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向head
- 3)nex指针指向待反转链表的第二个节点,目的是保存链表,因为cur改变指向后,后面的链表则失效了,所以需要保存
接下来,循环执行以下三个操作
- 1)next = cur.next, 保存作用
- 2)cur.next = pre 未反转链表的第一个节点的下个指针指向已反转链表的最后一个节点
- 3)pre = cur, cur = nex; 指针后移,操作下一个未反转服务器托管网链表的第一个节点
- 循环条件,当然是cur != null
- 循环结束后,cur当然为nullptr,所以返回pre,即为反转后的头结点
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
//定义三个变量分别保存前置节点、当前节点、后置节点
ListNode prev=null;
ListNode cur=head;
ListNode next=null;
while(curr!=null){
//取出当前节点的next指向保存到next变量
next = cur.next;
//当前节点的next指向已经保存,将当前节点的next指向prev变量
cur.next=prev;
//prev指向已经赋值给了当前节点的next,现在把当前节点赋值给prev
prev=cur;
//当前节点赋值给了prev变量,将下一节点next赋值给当前变量
cur = next;
}
return prev;
}
}
- Vector是矢量队列,继承了AbstractList,实现了List、RandomAccess、Cloneable、java.io.Serializable接口
- Vector继承了AbstractList,实现了List,因此是一个队列,实现了相应的添加、删除、修改、遍历等功能
- Vector实现了RandomAccess接口,因此可以随机访问
- Vector实现了Cloneable,重载了clone()方法,因此可以进行克隆
- Vector实现了Serializable接口,因此可以进行序列化
- Vector的操作是线程安全的
Vector四种遍历方式:
- 第一种通过迭代器遍历,通过iterator去遍历
Iterator iter=vector.iterator();
while(iter.hasNext())
{
value=(Interger)iter.next();
}
- 第二种随机访问,通过索引进行遍历
int size=vector.size();
for(int i=0;i
- 第三种通过for循环遍历
for( Integer inte: vector)
{
value=inte;
}
- 第四种通过Enumeration遍历
Enumeration enu=vector.elements();
while(enu.hasMoreElements())
{
value=(服务器托管网Integer)enu.nextElement();
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
一、简介 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(CPU、RAM、i/O)的挣用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发…