2021-12-16 链表

2021-12-16  本文已影响0人  16孙一凡通工

剑指 Offer II 021. 删除链表的倒数第 n 个结点

第一个思路就是纯粹读题按照题目链表的输出,其中需要注意第一个节点和最后一个节点。

Go版本:

 import "fmt"
func removeNthFromEnd(head *ListNode, n int) *ListNode {
    
    len:=0
    node1:=head;    
    if head.Next==nil {
        
        return nil;
    }
    for{
        len++;
        if node1.Next==nil{
            break;
        }
        node1=node1.Next
    }
fmt.Println(len)
node:=head;
tmp:=node;
count:=0;
    for{
      
            count++;
        if len-n==count{
           next:=node.Next
           node.Next=next.Next;
            break;
        }
         if node.Next==nil{
             tmp=tmp.Next
             break;
         }

         node=node.Next;
       
    }
    return tmp
}

第二个思路快慢指针
快指针先到n处,然后慢指针和快指针继续向下走,直到快指针是空,

java版本:

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {

        ListNode fast=head;
     
        while(n>0 && fast!=null){  
            n--; 
              fast=fast.next;   
        }
         ListNode dummy=head;         
         ListNode slow=dummy;
          if(fast==null){
            dummy=dummy.next;
            return dummy;
            }
           fast=fast.next;
        while(fast!=null){
            fast=fast.next;
            slow=slow.next;
        }
       
        slow.next=slow.next.next;
        return  dummy;
       
    }
}

上一篇 下一篇

猜你喜欢

热点阅读