今天来将一下面试中经常问到的一个问题:链表反转。
【题目1】给一个单向链表,请编写一个函数,把链表反转,并把反转的链表返回。
假设给的节点为
class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
this.next = null;
}
}
单向链表反转函数如下
public ListNode reverse1(ListNode head){
ListNode prev = null;
while(head != null){
ListNode next = head.next; //获取下一个节点
prev.next = head; //更改上一个节点的指向
prev = head; //上一个节点前进一位
head = next; //head节点前进一位
}
return prev;
}
【题目2】给一个双向链表,请编写一个函数,把链表反转,并把反转的链表返回。
假设给的节点为
class ListNode{
int val;
ListNode prev;
ListNode next;
public ListNode(int val){
this.val = val;
this.prev = null;
this.next = null;
}
}
双向链表反转函数如下
public ListNode reverse2(ListNode head){
ListNode cur = null;
while(head != null){
cur = head;
head = head.next;
cur.next = cur.prev;
cur.prev = head;
}
return cur;
}