2020-10-09

head->1->2->3->4->5->NULL

链表结点的结构体如下:

typedef struct LNode  
{
     
	ElemType data;
	struct LNode *next;		//指向后继结点
} LinkNode;	

对于表头head,其head->data是没有确切的数值的,在网上找了很多单链表反转的例子,最后得出了类似于这样的结果:

反转前:1,2,3,4,5

反转后:5,4,3,2,1,-842150451

经过调试,发现head->data的值就是-842150451,是一个不确定的值。

这是因为我在网上搜到的这些方法,他们的链表的头指针的data也包含有效的值,而我所创建的链表,其头指针仅充当指示的作用,并没有为它的data赋予有效值。

解决方法

定义一个pre指针,一开始为NULL值,

再定义cur,cur=head->next; 即第一个有有效data的节点

last,为 cur->next

2020-10-09_第1张图片

LinkNode *reverse(LinkNode *head)
{
     
	if (head == NULL)
		return NULL;
	else if (head->next == NULL)
		return head;

	LinkNode *pre = NULL;
	LinkNode *cur = head->next;
	LinkNode *last = cur;

	while (cur != NULL)
	{
     
		last = last->next;
		cur->next = pre;
		pre = cur;
		cur = last;
	}

	head->next = pre;
	return head;
}

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