Task02 주문 양식 및 목록

1, 병합이 주문 목록

두 사람은 새로운 정렬 된 목록 및 반환에 목록을 명령했다. 새로운 목록은 두 목록으로 구성 주어진 모자이크의 모든 노드입니다.
예 :
입력 : 1-> 2-> 4 1-> 3-> 4
출력 : 1-> 1-> 2-> 3-> 4 -> (4)

def mergetwoLists(self, l1, l2):
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        elif l1.val < l2.val:
            l1.next = self.mergeTwoLists(l1.next, l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1, l2.next)
            return l2

2, 카운트 다운이 N 노드의 목록을 삭제합니다

헤드 노드 목록에 목록, n은 노드의 삭제 목록 상호, 반환을 감안할 때.

예 :
1-> 2-> 3-> 4 -> 5 및 N = 2 : 목록이 제공.

제거 된 끝에서 두 번째 노드는,이 목록은 1-> 2-> 3-> 5지면.

def removeNthFromEnd(self, head, n):
        if not head or n<=0: #链表为空或者n无效
            return head
        p = ListNode(-1) #建造一个虚拟节点,方便边界处理
        p.next = head 
        #一次遍历得到链表长度
        a = p
        k = 0
        while a.next: 
            a = a.next
            k = k+1
        if k<n: #n无效
            return head
        #二次遍历找到需要删除的节点
        b = p
        num = k-n #需删除的前一个节点位置
        while num > 0:
            b = b.next
            num = num-1
        b.next = b.next.next #将指针指向删除节点的后一位
        return p.next 

3 회전 목록

k는 음이 아닌 것을 특징리스트 회전에서 k 개의 포지션만큼 우측으로 노드리스트의 각을 감안.

예 :
입력 : 1-> 2-> 3-> 4 - > 5-> NULL, K = 2
출력 : 4-> 5-> 1-> 2- > 3-> NULL

설명 :
오른쪽으로 회전 단계 1 : 5-> 1-> 2-> 3- > 4 -> NULL
회전 오른쪽으로 두 단계 : 4-> 5-> 1-> 2- > 3-> NULL

def rotateRight(self, head, k):
        if not head:
            return None
        if not head.next:
            return head
        old_tail = head 
        n = 1
        while old_tail.next: #计算链表长度
            old_tail = old_tail.next
            n = n+1
        old_tail.next = head #构造成环状

        new_tail = head 
        m = n - k % n -1
        while m:
            new_tail = new_tail.next #新的尾结点的位置
            m = m-1
        new_head = new_tail.next #新的头结点的位置
        new_tail.next = None #切断这个环
        return new_head

출시 팔 개 원래 기사 · 원 찬양 1 · 조회수 193

추천

출처blog.csdn.net/Moby97/article/details/103899064