在面试,笔试的过程中经常会遇到面试官问这种问题,实现单链表的倒置方法。现在对单链表的倒置犯法做个记录,方便自己以后查看。
单链表的定义:
1 public class Node {
2
3 int v;
4 Node next;
5 public Node(){
6 }
7 public Node(int v){
8 this.v = v;
9 }
10
11 public int getV() {
12 return v;
13 }
14 public void setV(int v) {
15 this.v = v;
16 }
17 public Node getNext() {
18 return next;
19 }
20 public void setNext(Node next) {
21 this.next = next;
22 }
23 }
单链表的倒置方法有两种:递归的和非递归的。下边分别介绍:
递归:
1 public static Node reverse(Node head){
2 if(head == null || head.next==null){
3 return head;
4 }
5 Node reverseHead = reverse1(head.next);
6 head.getNext().setNext(head);
7 head.setNext(null);
8 return reverseHead;
9 }
非递归:
1 /**
2 * 非递归实现
3 * @param head
4 * @return
5 */
6 public static Node reverse(Node head){
7 if (head == null) return head;
8 Node pNode=head;
9 Node cur = head.next;
10 Node nNode=null;
11 while(cur!=null){
12 nNode = cur.next;
13 cur.setNext(pNode);
14 pNode = cur;
15 cur = nNode;
16 }
17 head.setNext(null);
18 return pNode;
19 }
递归与非递归的实现和斐波那契函数的非递归实现很像。
时间: 2024-10-12 15:15:25