首先,我们需要创建一个Node类来表示链表的节点。Node类继承自NSObject,并包含一个数据成员。
@property (nonatomic, strong) id data;
接下来,我们可以创建一个简单的单链表。以下是链表的创建和反转过程:
创建节点并连接到链表中:
- 首先,我们创建一个头节点,并将其连接到链表的最前端。
- 然后,依次创建其他节点,并将它们连接到链表的后面。
遍历原链表并准备反转:
- 我们可以使用一个循环遍历链表的所有节点。
- 在遍历过程中,我们将每个节点从原链表中删除,并将它们按反转的顺序连接到一个新的链表中。
反转链表:
- 初始化一个新的头节点,并将其连接到原链表的最后一个节点。
- 然后,我们从原链表的倒数第二个节点开始,依次将节点连接到新链表的后面。
最终验证反转结果:
- 反转完成后,我们可以遍历新链表,确保所有节点的数据顺序与原链表相反。
以下是完整的代码示例:
@import Foundation
@interface Node : NSObject
@property (nonatomic, strong) id data;@property (nonatomic, strong) Node* next;@end// 创建单链表并添加节点
Node* head = [[Node alloc] init];head.data = @"第一个节点";head.next = [[Node alloc] init];head.next.data = @"第二个节点";head.next.next = [[Node alloc] init];head.next.next.data = @"第三个节点";// 反转链表
Node* reversedHead = [[Node alloc] init];reversedHead.data = head.next.next.data; // 获取原链表的最后一个节点Node* current = head.next; // 从第二个节点开始// 将节点连接到反转后的链表中
while (current) {Node* nextNode = [[Node alloc] init];nextNode.data = current.data;reversedHead.next = nextNode;current = current.next;}// 输出反转后的链表数据
NSLog(@"反转后的链表数据: %@", reversedHead.data);这样,我们就成功实现了单链表的反转。通过以上步骤和代码示例,你可以轻松掌握链表反转的基本方法。