단일 연결리스트를 역방향.
단일 연결리스트를 역방향.
예 :
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
고급 :
당신은 반복적 인 역 또는 반복적으로 나열 할 수 있습니다. 당신은 두 가지 방법으로이 문제를 해결할 수 있습니까?
후속 :
링크 된 목록 중 하나를 반복적으로 또는 반복적으로 반전 될 수있다. 당신은 모두를 구현할 수 있을까요?
문제 해결 아이디어 :
마지막 노드에 각각의 이송은 시간 복잡도가 너무 높은 경우에도이 방법을 촬영합니다. 이러한 두 가지 방법, 반복과 재귀의 요구 사항과 같은 고급 주제 :
반복 :
마다 하위 노드 중 노드 기본 노드로서 새로운리스트에 추가된다 :
오리지널리스트 : 1-> 2-> 3-> 4 -> 5
새로운 노드의 첫번째 노드를 분리하면 헤더리스트로 추가된다 : 2-> 3-> 4 -> 5 : 1의 오리지널리스트
노드로서 분리 된 헤드 노드가 새로운리스트에 추가된다 : 2-> 1 오리지널리스트 : 3-> 4 -> 5
3-> 2-> 1 오리지널리스트 : 4-> 5 노드로 분리 된 헤드 노드는 새로운리스트에 추가
4-> 3-> 2-> 1 오리지널리스트 : 노드로 분리 된 헤드 노드는 새로운리스트에 추가 5
5-> 4-> 3-> 2-> 1 오리지널리스트 : 노드로 분리 된 헤드 노드는 새로운리스트에 추가 널
자바:
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode pre = null;
ListNode tmp = null;
while (head != null) {
tmp = head.next;//tmp暂存当前节点的下一个节点
head.next = pre;//当前节点下一个指向pre
pre = head;//刷新pre
head = tmp;//刷新当前节点为tmp
}
return pre;
}
}
Python3 :
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
pre,tmp=None,None
while(head):
tmp=head.next
head.next=pre
pre=head
head=tmp
return pre
재귀 :
실제로 재귀 함수의 전체 스택입니다 : 밖으로 지속
기준 조건은 동일하고있다 재귀 함수에 전달리스트의 마지막 노드에 대한 객체를 반환 (목록의 마지막에) 빈 노드가 발생했습니다. 하나 개의 노드와 신규 노드로 분리 한리스트의 끝에서 헤드리스트의 말미에 부가된다. 그리고 반복적 인 방법과 비슷한 원리.
오리지널리스트 : 1-> 2-> 3-> 4 -> 5
재귀 최종 계층 발생한 노드가 null 꼬리 노드 5를 반환
재발 다시 새로운리스트의 스플릿 테일 노드의 노드로 층 5 : 5 5 노드 초기 블랭크 원래리스트 1-> 2-> 3-> 4 -> 널
새로운리스트의 스플릿 테일 노드의 노드로 다시 회귀 층 4 : 5> 4 블랭킹 원 노드 (4), 원래 목록 1-> 2-> 3-> 널
다시 새로운 별도 테일 노드리스트로서 이전 노드 3 재발 5-> 3-> 3 원 노드 3 오리지널리스트 블랭킹 1-> 2-> 널
다시 새 연결리스트로 분할 노드 2의 이전 노드 재발 5-> 4-> 3-> 2 원래 블랭킹 노드 2 원래리스트 1-> 널
다시 새 연결리스트로 분할 노드의 이전 노드 재발 5-> 3-> 3> 2> 1, 원래 노드 블랭킹 원래 널리스트
자바:
class Solution {
public ListNode reverseList(ListNode head) {
//基线条件
if (head == null || head.next == null) return head;
//递归
ListNode tmp = head.next;//暂存头节点的下一个节点
ListNode pre = reverseList(head.next);//递归调用该函数,pre为返回的新链表的头节点,原链表的最后一个节点,无论递归多少层该返回值一直传递不变
tmp.next = head;//暂存的下一个节点指向传入节点
head.next = null;//下一个节点即原本指向tmp的节点 置空
return pre;
}
}
Python3 :
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
tmp = head.next
pre = self.reverseList(head.next)
tmp.next = head
head.next = None
return pre
브러시 번호 제목으로 대중의 관심에 오신 것을 환영합니다 : 사랑 버그 쓰기