链表相关

1.链表反向打印

 1 public static void printNode(ListNode pHead){
 2   /*  
 3       采用栈来从尾到头打印链表
 4    Stack<Integer> stack=new Stack<>();
 5     while (pHead !=null){
 6         stack.push(pHead.val);
 7         pHead=pHead.next;
 8     }
 9     while (!stack.isEmpty()){
10         System.out.println(stack.pop());
11     }*/
12 采用递归的形式打印
13   if(pHead !=null){
14       if(pHead.next !=null){
15          printNode(pHead.next);
16       }
17       System.out.println(pHead.val);
18   }
19 }

2.链表反转

 1 public static ListNode reverseList(ListNode pHead){
 2   ListNode preNode=null;
 3   ListNode pNode=pHead;
 4   ListNode res=null;
 5   if(pHead==null){
 6       return res;
 7   }
 8   while (pNode !=null){
 9       ListNode nNode=pNode.next;
10       if (nNode == null) {
11           res=pNode;
12       }
13       pNode.next=preNode;
14       preNode=pNode;
15       pNode=nNode;
16   }
17   return res;
18 }

3.查找链表倒数第K个节点的值

 1 public static int findKNode(ListNode pHead,int k){
 2   ListNode fast=pHead; ListNode slow=pHead;
 3   ListNode pNode=pHead;
 4   if(pHead==null || k<=0){
 5       return -1;
 6   }
 7   for(int i=0;i<k;i++){
 8       if(fast.next !=null){  //用于判断k是否大于链表节点总数
 9           fast=fast.next;
10       }else {
11           return -1;
12       }
13   }
14   while (fast !=null){
15       fast=fast.next;
16       slow=slow.next;
17   }
18   return slow.val;
19 }

4.判断链表是否成环

 1 public static int findMiddleNode(ListNode pHead){
 2   ListNode fast=pHead;
 3   ListNode slow=pHead;
 4   ListNode pNode=pHead;
 5   if(pHead==null){
 6       return -1;
 7   }
 8   while (fast.next !=null){
 9       fast=fast.next.next;
10       slow=slow.next;
11   }
12   return slow.val;
13 }

5.合并两个排序的链表

 1 public static ListNode mergeList(ListNode pHead1,ListNode pHead2){
 2   if(pHead1==null){
 3       return pHead2;
 4   }
 5   if (pHead2 == null) {
 6       return pHead1;
 7     }
 8    ListNode res=null;
 9   if(pHead1.val<pHead2.val){
10       res=pHead1;
11       res.next=mergeList(pHead1.next,pHead2);
12   }else {
13       res=pHead2;
14       res.next=mergeList(pHead1,pHead2.next);
15   }
16   return res;
17 }

 

 

 

posted @ 2020-04-24 22:10  seedss  阅读(113)  评论(0编辑  收藏  举报