面试题总结五:完整的单链表反转

完整的单链表的反转:

package javafirst;
import javafirst.Solution.ListNode;

//链表的赋值
public class Main {  
    public static void main(String[] args) {  
        ListNode head = new  ListNode(3);  
        ListNode node1 = new ListNode(5);  
        ListNode node2 = new ListNode(6);  
        ListNode node3 = new ListNode(9);  
        ListNode node4 = new ListNode(7);  
        ListNode node5 = new ListNode(2);  
        ListNode node6 = new ListNode(1);  
        ListNode node7 = new ListNode(12);  
        head.next = node1;  
        node1.next = node2;  
        node2.next = node3;  
        node3.next = node4;  
        node4.next = node5;  
        node5.next = node6;  
        node6.next = node7;  
        printList(head);     
        printList(reverseNode(head))
        
  
    } //自己对链表结点,指针和值的定义
    public static class ListNode  
    {  
      int val;  
       ListNode next;     
      public ListNode(int x){  
            val=x;  
     }  
    }
    public static void printList(ListNode head) {  
        while (head != null) {  
            System.out.print(head.val + " ");  
            head = head.next;  //不能粗心大意
        }  
        System.out.println();  

    }  

//函数名的书写,从第二个单词的首字母开始大写,而类的每个单词的首字母大写,小常识。

    public static ListNode reverseNode(ListNode head){  
        // 如果链表为空或只有一个节点,无需反转,直接返回原链表表头  
        if(head == null || head.next == null)  
            return head;  
          
        ListNode reHead = null;  
        ListNode cur = head;  
        while(cur!=null){  
            ListNode reCur = cur;      // 用reCur保存住对要处理节点的引用  
            cur = cur.next;        // cur更新到下一个节点  
            reCur.next = reHead;   // 更新要处理节点的next引用  
            reHead = reCur;        // reHead指向要处理节点的前一个节点  
        }  
        return reHead;  
   }  
}

猜你喜欢

转载自blog.csdn.net/juleen890/article/details/80806263
今日推荐