学习目的
了解链表反转的操作和运行过程
掌握相关代码
主要问题及解决方式
1.建立虚拟头结点辅助反转
struct ListNode *reverseList(struct ListNode *head)
{
struct ListNode *ans = (struct ListNode *)malloc(sizeof(struct ListNode));
ans->next = NULL;//初始话头节点
struct ListNode *cur = head;
while (cur != NULL)
{
struct ListNode *next = cur->next;//next指向后继节点
cur->next = ans->next;//断开原本链表中的cur指针指向
ans->next = cur;//新链表的结点连接到原链表的头节点,第一个结点。。。。。。
cur = next;//指针域后移
}
return ans->next;//返回第一个结点地址域
}
运行截图如下:
2.直接操作反转链表
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* prev = NULL;
struct ListNode* curr = head;
while (curr != NULL) {
struct ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
运行截图如下:
学习总结
不带头节点(虚拟节点)的链表反转要注意,带的用头插法来理解就行,
今天松懈了一下,明天再理解一下不带头节点反转链表