单链表反转

这里我们让current始终指向每次被反转后的节点中的最后一个,temp始终指向被反转的节点,因此current的next节点就是要被反转的节点,即temp。

#include<iostream>
using namespace std;
struct ListNode{
	int data;
	ListNode *next;
};
ListNode* Create_Linklist(int *arr,int len)
{
	ListNode* head = new ListNode();
	head->next = NULL;
	ListNode* L = head;
	for (int i = 0; i < len; i++)
	{
		ListNode* newn = new ListNode();
		newn->data = arr[i];
		newn->next = NULL;
	    L->next = newn;
		L = L->next;
	}
	return head;
}
void Reverse_LinkList(ListNode* &head)
{
	if ( head && head->next )
	{
		ListNode* current = head->next;   //current始终指向每次被反转后的节点中的最后一个,因此current的next节点就是要被反转的节点,即tamp
		ListNode*  temp;   //temp始终指向被反转的节点,因此 temp 等于 current->next
		while (current->next)
		{
			temp = current->next;
			current->next = temp->next;
			temp->next = head->next;
			head->next = temp;
		}
	}
}
void Print_LinkList(ListNode* &head)
{
	if (head)
	{
		ListNode* L = head;
		L = L->next;
		while (L)
		{
			cout << L->data;
			L = L->next;
		}
	}
}
void main(int argc, char *argv[])
{
	int arr1[] = { 1, 3, 5, 7 };
	ListNode* head = Create_Linklist(arr1, sizeof(arr1) / sizeof(int));
	Reverse_LinkList(head);
	Print_LinkList(head);  
}

你可能感兴趣的:(单链表反转)