今天来将一下面试中经常问到的一个问题:链表反转。
【题目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;}